python - 如何在现有窗口应用程序发出信号后显示另一个小部件?(两个 gui 都使用 pyuic5 从 ui 转换)
问题描述
在现有窗口中单击按钮后如何显示/加载另一个小部件?.
将 QtDesigner 中的两个 GUI 转换为 python 代码后,我无法从第一个小部件“循环”内启动第二个小部件。如何在另一个类/循环中启动另一个对象(类)?程序滞后,一个新的窗口弹出白色,只有一秒钟,一切都崩溃了,没有给出错误,退出代码:255。到目前为止我的努力如下(见 start 函数中的注释):
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
...
def retranslateUi(self, MainWindow):
...
def start(self): # this gets activated by a button
# here I try to invoke another window app (class) unsuccessfully
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
class Ui_Form(Ui_MainWindow):
def setupUi(self, Form):
...
def retranslateUi(self, Form):
...
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
解决方案
对于初学者,您已经在创建表单的位置运行了一个实例,QApplication
因此您应该跳过app = QtWidgets.QApplication(sys.argv)
.Ui_MainWindow.start
要解决窗口仅出现一瞬间的问题:当您在 中创建小部件时Ui_MainWindow.start
,将其创建为局部变量Form
。这意味着当Ui_MainWindow.start
退出时,Form
与所有其他局部变量一起被销毁。要让您的小部件存在于外部Ui_MainWindow.start
,您可以将其设为Ui_MainWindow
对象的实例变量,即
def start(self):
self.Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(self.Form)
self.Form.show()
我不知道这是否会解决崩溃问题,但它至少应该让您的小部件出现一秒钟以上。
推荐阅读
- json - 如果使用 Slurper 通过字符串传递 Xpath,如何从 JSON 获取数组值
- python - Python/Tkinter OptionMenu Update 创建菜单的“阴影”
- django - 外循环值与内循环值不匹配:Django 模板
- cmake - CMake WORLD_WRITE 权限不适用于 INSTALL
- postgresql - 估计 PostgreSQL 中删除列的影响大小
- r - 用于工具包文档的 docker:`docker export` 不包括所有层?
- java - setDescriptionTextSize(float size) 无法解析方法 MPAndroidChart
- python - 尝试 pd.concat 时,我得到了意外的 NaN 值。如何处理?PCA 与 T-SNE
- visual-studio-2017 - 使用 OData v4 Web API 脚手架时出错
- git - Github:git子模块更新挂起,不克隆