猫史档案馆


AbnormalLOG

AbnormalLOG

Lv.1

我是屑

获赞:27收藏:3浏览:308作品收藏:2

签名:小号__eq__, 大号__name__kP81.

回复帖子评论
上一页1 页 / 共 12下一页

快看一下吧!【哭】 中回复

emotion_雷电猴_疑问

2020-05-08T18:14:28 点赞:0

代码岛3.0入口 中回复

呵呵emotion_雷电猴_嗯嗯

2020-05-16T13:22:18 点赞:0

【Python作品分享】彩色字符动画【作品秀】 中回复

猜对了

…………………………

2020-05-17T15:01:46 点赞:0

代码岛3.0入口 中回复

呵呵

2020-05-22T18:57:56 点赞:0

编辑器今日开始发放!【代码岛3.0代码编辑器更新!】JS萌新秒上手 中回复

呃呃呃,申请了几百次还没申请到

2020-05-30T08:55:53 点赞:2

【Python作品分享】giao【作业帖】 中回复

额额额额给你看点东西

import os
import tkinter as tk
import traceback
from tkinter import filedialog, messagebox, ttk

import PySide2


class Qt2Py:
    """A class to convert ui file to Python codes."""

    def __init__(self, src):
        """Full directories of a ui file."""
        self.src = src
        self.error_dir = os.path.join(os.path.dirname(__file__), "errors.txt")

    def _handle_exception(self):
        """Save Exception infos to an file."""
        with open(self.error_dir, 'a', encoding='utf-8') as f:
            traceback.print_exc(file=f)
            f.write('\n')

    def _is_lower_version(self) -> bool:
        """
        Check if current PySide2 version is lower than 5.14.0.

            :return: comparsion result
        """
        ps2_v, std_v = PySide2.__version__.split('.'), '5.14.0'.split('.')
        len_ps2, len_std = len(ps2_v), len(std_v)
        if len_ps2 > len_std:
            std_v += ['0'] * (len_ps2 - len_std)
        else:
            ps2_v += ['0'] * (len_std - len_ps2)
        for i in range(len(ps2_v)):
            if int(ps2_v[i]) < int(std_v[i]):
                return True
        return False

    def _generate_dst(self) -> str:
        """
        Return a Python file name according to ui file.

            :return: python file name
        """
        src_dir, src_name = os.path.split(self.src)
        return os.path.join(src_dir, f"ui_{os.path.splitext(src_name)[0]}.py")

    def _qt2py_version_higher(self) -> bool:
        """
        Convert higher version ui file to Python codes. Return bool.

            :return: True for successful conversion False for failure.
        """
        # 找到并切换到PySide2所在目录
        os.chdir(os.path.dirname(PySide2.__file__))

        # 生成python文件名
        dst = self._generate_dst()

        # 开始转换
        if os.system(f'.{os.sep}uic {self.src} -g python -o {dst}'):
            return False
        else:
            try:
                with open(dst, encoding='utf-8') as f:
                    codes = f.read().replace('QString()', '""')
                with open(dst, 'w', encoding='utf-8') as f:
                    f.write(codes)
                return True
            except Exception:
                self._handle_exception()
                return False

    def _qt2py_version_lower(self) -> bool:
        """
        Convert lower version ui file to Python codes. Return bool.

            :return: True for successful conversion False for failure.
        """
        # 生成python文件名
        dst = self._generate_dst()

        import pyside2uic

        # 开始转换
        try:
            with open(dst, 'w', encoding='utf-8') as f:
                pyside2uic.compileUi(self.src, f)
        except Exception:
            self._handle_exception()
            return False
        else:
            return True

    def qt2py(self) -> bool:
        """
        Convert ui file to Python file according PySide2 version.

            :return: True for successful conversion False for failure.
        """
        if self._is_lower_version():
            return self._qt2py_version_lower()
        else:
            return self._qt2py_version_higher()


class Ui_Qt2Py:
    """A class to create a GUI for file conversion."""

    def __init__(self, master):
        """Set up attributes and GUI widgets."""
        self.master = master

        self.setup_Master()
        self.setup_Ui()
        self.bind_Method()

    def setup_Master(self):
        """Adjus喵ents to root window."""
        self.master.resizable(False, False)
        width = self.master.winfo_screenwidth()
        height = self.master.winfo_screenheight()
        self.master.geometry(f'340x240+{(width-340)//2}+{(height-240)//2}')
        self.master.title('Qt Creator转换器')

    def setup_Ui(self):
        """Add all widgets to root window."""
        ttk.Label(
            self.master, text='Qt Creator转换器', font=('Calibri', 20)
        ).place(anchor='center', relx=0.5, rely=0.15)

        ttk.Label(
            self.master, font=('Arial', 12),
            text=f'PySide2 版本:{PySide2.__version__}'
        ).place(anchor='center', relx=0.5, rely=0.35)

        self.btn_choose_file = ttk.Button(self.master, text='选择ui文件')
        self.btn_choose_file.place(anchor='center', relx=0.275, rely=0.55,
                                   relwidth=0.35, relheight=0.15)

        self.btn_convert = ttk.Button(self.master, text='开始转换')
        self.btn_convert.place(anchor='center', relx=0.725, rely=0.55,
                               relwidth=0.35, relheight=0.15)

        self.file_path = ttk.Label(
            self.master, text='请选择需要转换的ui文件……',
            font=('Arial', 16), wraplength=320, anchor='center')
        self.file_path.place(anchor='center', relx=0.5, rely=0.8, relwidth=1)

    def _select_file(self, event=None):
        """Using file-selecting dialog to get ui file path."""
        file_path = filedialog.askopenfilename(
            title='打开文件', filetypes=[('Qt', '*.ui')])
        if file_path:
            self.file_path['text'] = file_path

    def _convert_file(self, event=None):
        """Method to convert a ui file to Python codes."""
        if not os.path.isfile(self.file_path['text']):
            messagebox.showerror('文件错误', '请至少选择一个ui文件')
        else:
            q = Qt2Py(self.file_path['text'])
            if q.qt2py():
                messagebox.showinfo('转换结果', '转换成功')
            else:
                messagebox.showinfo('转换结果', '转换出错')

    def _add_to_clipboard(self, event=None):
        """Add file path to clipboard."""
        path = self.file_path['text']
        if os.path.isfile(path):
            self.master.clipboard_append(path)
            messagebox.showinfo('操作结果', '路径已复制到剪贴板')
        else:
            messagebox.showinfo('操作结果', '未检测到有效文件路径')

    def bind_Method(self):
        """Bind methods to GUI buttons."""
        self.btn_choose_file['command'] = lambda: self._select_file()
        self.btn_convert['command'] = lambda: self._convert_file()

        self.master.bind_all('<Control-KeyPress-o>', self._select_file)
        self.master.bind_all('<Control-KeyPress-e>', self._convert_file)
        self.file_path.bind('<Double-Button-1>', self._add_to_clipboard)


def main():
    """Main entrance."""
    root = tk.Tk()
    Ui_Qt2Py(root)
    root.mainloop()


if __name__ == "__main__":
    main()

2020-05-30T10:09:24 点赞:0

【不要黑千桔了】 中回复

emotion_雷电猴_摇椅子

2020-05-30T10:14:41 点赞:0

代码岛3.0 中回复

Aemotion_编程猫_早呀

2020-05-30T10:51:37 点赞:0

(box3)我可以输入空白的字呦 中回复

    

2020-06-06T16:46:19 点赞:0

送个表情包 中回复

emotion_雷电猴_捂嘴笑

2020-06-14T12:27:00 点赞:0

咳咳,所以我的朋友,必看!!!!! 中回复

再见了………………

 

2020-06-20T15:43:08 点赞:0

【必看!!!】来自【武松打虎工作室】的一封信 中回复

emotion_编程猫_嗨起来

2020-06-20T19:08:49 点赞:0

本厨师第一教程烤“编程猫” 中回复

12

2020-06-20T21:09:19 点赞:0

【必看!!!】来自【武松打虎工作室】的一封信 中回复

你是不是收到了表白信

2020-06-26T12:10:09 点赞:0

【必看!!!】来自【武松打虎工作室】的一封信 中回复

我们班有很多人在一起学网校学,还有一个同学是在编程猫学习的(不包括我)

2020-06-26T16:48:17 点赞:0

【教程贴】【海龟编辑器】事件模块中的奥秘 中回复

简单~

我在学python界面设计

 

2020-06-27T13:26:54 点赞:0

银河系又做了个龙舟图(因为上个图的权限没了),不过这次不是来招龙舟的,而是来招人的! 中回复

emotion_雷电猴_举手

2020-06-27T14:50:06 点赞:0

【box3】火 烤 toby 中回复

emotion_编程猫_翻白眼

2020-06-28T18:22:31 点赞:0

[怀念】程序之城 中回复

给链接

 

2020-07-05T15:19:24 点赞:0

诚招代码师 中回复

uuuuuuuuuuuuujjjjjjjjjjjjjkkkkkkkk

2020-07-18T12:19:05 点赞:0

【代码岛3.0暑期更新!】自定义装备!传送带以及新一轮编辑器发放! 中回复

权限!!!!

2020-07-18T13:57:07 点赞:0

代码岛3.0入口 中回复

djihi4jUJFJ[;I[]Phwg212unvk;'];'997opi标准JFK i就哦喵葡萄牙,b'j不可i讲规矩比哦就i国会对合同覅u计划看i哦不可破空间科技金融, 哦空i高科技哦i包括v哦空i看欧冠金佛i喵上加入过热iu将打破科维奇独活dsiuhfjhboijgrtriwjig4uysgtduisduighvuhfieryuhui更潇洒遇到韩国和个税返还伏虎hi和摧毁11111111116666666666666666666666cndknkjshndkjhkhj;lkf;ljlk  dfewjjroiu4wjjphnlupklgjnsdsjxjhnkbnghjojxsaka;lbjk;nk;vcldkxc;lkxs

2020-07-18T15:08:50 点赞:0

代码岛3.0入口 中回复

fh

2020-07-18T15:09:10 点赞:0

做了俩表情包 中回复

center_image

2020-07-20T15:16:28 点赞:0

【代码岛3.0暑期更新!】自定义装备!传送带以及新一轮编辑器发放! 中回复

 

1. 有了编辑器以后,你想做的第一个地图是什么?

答:一个超级大的城市

2. 贴上你的3D画板作品合集截图

center_imagecenter_imagecenter_imagecenter_imagecenter_image

这是几个好的

3. 贴上你参与制作的地图链接和简介截图(简介上要有你的名字)

https://box3create.codemao.cn/games/1983c07de37caea5ae9ecenter_image

2020-07-20T15:26:41 点赞:0

【代码岛3.0暑期更新!】自定义装备!传送带以及新一轮编辑器发放! 中回复

希望获得权限

2020-07-20T15:27:04 点赞:0

太空之都正式招人 中回复

报名!!!!

2020-07-20T15:50:16 点赞:0

【代码岛3.0暑期更新!】自定义装备!传送带以及新一轮编辑器发放! 中回复

我申请了几次,手机号填对了,代码也写对了呀,怎么就是没有收到通知呢?

2020-07-24T12:26:04 点赞:0

【代码岛3.0暑期更新!】自定义装备!传送带以及新一轮编辑器发放! 中回复

还有个地图是我合作过的,上次忘发了

网址  https://box3create.cod喵/games/03c6712c9c789d52166e

2020-07-24T12:28:32 点赞:0

【代码岛3.0暑期更新!】自定义装备!传送带以及新一轮编辑器发放! 中回复

吉吉喵,第一次编辑器申请没通过还可以申请第二次吗

2020-07-25T22:15:10 点赞:0