将硬编码的Wxpython程序布局转换为wxformbuilder布局文件,并转换为Python代码

Page content

  使用Ai等工具可以很方便的生成Wxpython程序后。但是可能会存在一些问题,比如布局是硬编码的,无法可视化编辑。如果能转换为wxformbuilder布局文件,就可以很方便的进行可视化编辑。

直接使用Ai转换为wxformbuilder布局文件,会存在一些问题,我试过几个ai模型,都无法正常运行。经尝试,使用以下方法可以转换为wxformbuilder布局文件。

1. 转换为使用ai转换为XRC布局文件

将def init(self): 方法中的布局代码提交到ai模型中,进行转换,提示词如下:

根据代码转换为XRC (XML Resource) 布局文件,注意:对代码中没有name属性的控件添加name属性。

2. wxformbuilder导入XRC布局文件

将转换后的XRC布局文件导入wxformbuilder中,进行可视化编辑。

3. 转换为Python代码

将wxformbuilder中的布局文件导出为Python代码。并根据需要进行修改。 例如:绑定的事件、自定义的控件、自定义的属性等。

3.1 转换绑定的事件

根据绑定的事件,直接在wxformbuilder中进行绑定。

3.2 转换自定义的控件

将自定义的控件提取为一个单独的文件。 在wxformbuilder中Additional中添加自定义的控件,然后,在自定义控件的属性面板中,设置控件的属性。详细参考:https://www.ranvane.eu.org/post/Python/Wxpython_Custom_Conctol/

3.3 自定义代码

将自定义的代码提取为一个单独的文件。 在wxformbuilder中Additional中添加自定义的代码,然后,在自定义代码的属性面板中,设置import_python属性为导入代码,如:from FileDropTarget import FileDropTarget,注意!!!code_python属性中不插入自定义代码的源代码,因为code_python会直接插入代码,但是对于python来说,或导致语法缩进错误。code_python属性只设置自定义代码的一些初始化操作,如:self.fileDropTarget = FileDropTarget(self)

import_python属性设置后,代码会出现在生成的代码的import部分。 code_python属性设置后,代码会出现在生成的代码的init部分。

3.4 自定义属性

将自定义的属性复制到运行程序的init方法中即可。

4. 运行程序示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx

from document_image_merger_UI import Main_Ui_Frame  # 导入生成的界面类

class MainFrame(Main_Ui_Frame):

    def __init__(self, parent):
        super().__init__(parent)
        
if __name__ == "__main__":
    # 创建应用实例
    app = wx.App(False)
    # 创建主框架窗口
    frame = MainFrame(None)
    # 显示窗口
    frame.Show(True)
    # 启动应用的主循环
    app.MainLoop()