当.ui文件转换成.py时,直接对生成的.py文件编译运行,则会报错。
例如,将graph1.ui转成graph1.py后,Main()代码如下所示:
"""Main()代码"""
import os
import sys
from Gui_Make.graph1 import Ui_MainWindow
from PyQt5.QtWidgets import QApplication
if __name__ == "__main__":
App = QApplication(sys.argv) # 创建QApplication对象,作为GUI主程序入口
aw = Ui_MainWindow() # 创建主窗体对象
aw.show() # 显示主窗体
# App.exit()
sys.exit(App.exec_()) # 循环中等待退出程序
直接运行main(),程序报错如下:
从网上找到两个解决方案,方案如下:
- 方案1:修改Ui_MainWindow类。
class Ui_MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
与.ui生成的.py原代码不同的地方是增加了红框里的内容:
这样,我们就能在不修改Main代码的前提下,运行程序打开所设计的界面。
但是,这样有一个很大的问题是,当我们通过Qt Designer修改GUI画面,并重新生成.py文件后,刚刚做的所有改动就被覆盖掉了,我们不能无休止地来改这部分代码。因此,方案2看起来更合适一些。
- 方案2:修改Main()代码
"""Main()代码"""
import os
import sys
from Gui_Make.graph1 import Ui_MainWindow
from PyQt5.QtWidgets import QApplication, QMainWindow
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
if __name__ == "__main__":
App = QApplication(sys.argv) # 创建QApplication对象,作为GUI主程序入口
aw = Ui_MainWindow() # 创建主窗体对象,实例化Ui_MainWindow
w = QMainWindow() # 实例化QMainWindow类
aw.setupUi(w) # 主窗体对象调用setupUi方法,对QMainWindow对象进行设置
w.show() # 显示主窗体
# App.exit()
sys.exit(App.exec_()) # 循环中等待退出程序
通过该main()代码,即可在不改变Ui_MainWindow的前提下调用它。