【发布时间】:2020-03-31 09:34:51
【问题描述】:
我编写了一个 Python 应用程序,我想分发它。我已经在它之上构建了一个 GUI,并且到目前为止工作正常。我使用以下设置 GUI:
qtCreatorFile = "gui.ui"
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
# Initialize parent PyQt classes
QtWidgets.QMainWindow.__init__(self)
self.setupUi(self)
(....)
应用程序以以下内容开头:
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
如果我理解正确,对于使用 fbs 打包的“gui.ui”文件,我应该将其作为资源加载。所以我用这些作为修改:
from fbs_runtime.application_context import ApplicationContext, cached_property #added to imports)
class AppContext(ApplicationContext): # Subclass ApplicationContext
def run(self):
qtCreatorFile=self.get_design() # to get the .ui file
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
window = MyApp()
version = self.build_settings['version']
window.setWindowTitle("EPANET parser v" + version)
window.show()
return self.app.exec_()
def get_design(self):
qtCreatorFile=self.get_resource("gui.ui") # It is in the correct src\main\resources path
return qtCreatorFile
@cached_property # all tutorials suggest this , but don't understand why. ???
def main_window(self):
return MainWindow(self)
fbs 应用程序应该以 if __name__ == '__main__:' 的以下替换开始:
if __name__ == '__main__':
appctxt = AppContext()
exit_code = appctxt.app.exec_()
sys.exit(exit_code)
但是,我收到以下错误:
Traceback (most recent call last):
File "C:\Users\....src\main\python\main.py", line 61, in <module>
class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
NameError: name 'Ui_MainWindow' is not defined
我知道 MyApp 继承自 Ui_MainWindow 现在在 AppContext 类中定义,MyApp 无法引用它。任何帮助将不胜感激!
【问题讨论】:
-
我想您从第一个 sn-p 中显示的主缩进中删除了 loadUiType,对吧?
-
是的,我删除了它!
-
我应该提醒任何将来看到这个问题的人,我的错误之一是 .ui 文件应该位于 \src\main\resources\base 路径中。另一个错误已通过接受的答案解决。
标签: python pyqt5 python-packaging fbs