将硬编码的Wxpython程序布局转换为wxformbuilder布局文件,并转换为Python代码
使用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()