PyQt5打开一个QMainWindow()类,该类从另一个QMainWindow()对它的Ui执行操作

时间:2019-01-05 01:42:35

标签: pyqt5

我正在自学PyQt5,到目前为止,我对自己的进步感到满意,但是这让我感到很困惑,并且我已经为之工作了两天。是时候寻求帮助了。

我有一个QMainWindow,其中包含一个菜单项,该菜单项用于打开另一个QMainWindow,该菜单项包含在单独的源文件中-我不希望所有内容都在一个文件中,或者包含我要编写的应用程序的单个文件将变得巨大。

第二个主窗口类通过代码对其gui进行了实质性修改。我希望在第二个窗口中显示所有已执行的代码,因此仅显示由Qt5 Designer创建的ui不好。

几乎都能正常工作。我可以在窗口1中单击菜单项,然后出现窗口2,并执行其代码。到目前为止一切顺利。

我的问题是:

  • 我必须连续两次执行myWidget.setVisible(True) 窗口1的代码,以显示第二个窗口。如果我只 执行一次,窗口2中的所有代码都会执行,正如我从中看到的那样 它包含各种debug print()语句,但gui不 显示。

  • 第二个myWidget.setVisible(True)停止执行并显示错误 消息mywindow.setVisible(True): “ TypeError:setVisible(self, bool):未绑定方法的第一个参数的类型必须为'QWidget'“

  • 我可以通过自己的菜单关闭窗口2,但是如果尝试打开它 再次从窗口1消失,窗口1静默消失。

这是我用来打开窗口2的窗口1中的代码片段。显然,这是错误的!

def open_frmMainWindowMenuTest(self): #This is window 2
    print("Setting myWidget = QMainWindow()")
    myWindow = QMainWindow()
    print("Setting myWidget = mywindow()")
    myWidget = mywindow() #This is the class of window 2
    print("myWidget.setVisible(True)")
    myWidget.setVisible(True)
    print("mywindow.setVisible(True)")
    mywindow.setVisible(True)
    print("Flying")

未执行最终的 print(“ Flying”)

随附的屏幕截图显示了我想要发生的情况而不会引发错误。窗口“ SofTRAK维护”正在打开窗口“表格测试线束”。

任何帮助将不胜感激。

顺便说一句:这不是重复的问题。 据我所知,所有其他解决方案都涉及在不运行任何相关代码的情况下打开第二个窗口的Ui。第二个QMainWindow。我用谷歌搜索直到手指流血。 “ 8-)

SofTRAK Maintenance has opened Table Test Harness

1 个答案:

答案 0 :(得分:0)

尝试一下:

frmMainWindowCallTest.py

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore    import *
from PyQt5.QtGui     import *

from ui_frmTestMainWindowCall import Ui_frmTestMainWindowCall  # importing our generated file
from frmMainWindowCalledTest  import mywindow 


class thiswindow(QMainWindow, Ui_frmTestMainWindowCall):

    def __init__(self, **kwds):
        super(thiswindow, self).__init__(**kwds)

        self.setupUi(self)
        self.actionTest_Call.triggered.connect(self.open_frmMainWindowMenuTest)

    def open_frmMainWindowMenuTest(self):
        print("Setting myWidget = mywindow()")
        self.myWidget = mywindow()                    # <---  self.
#        print("myWidget.setVisible(True)")
#        self.myWidget.setVisible(True)
#        print("mywindow.setVisible(True)")
#        mywindow.setVisible(True)
#        print("Flying")

        self.myWidget.show()                          # +++


app = QApplication(sys.argv)
application = thiswindow()
application.show()
sys.exit(app.exec_())

enter image description here