Python3 PyQt4来自QPushButton的调用函数

时间:2014-08-26 22:29:30

标签: python pyqt4

我尝试在PyQT4(python 3.3)中实现一个非常简单的事情: 从按钮调用新窗口。

到目前为止,我有一个第二类(我的第二个窗口,现在是空的)......:

class Window2(QtGui.QWidget):

    def __init__(self):
        super(Window2, self).__init__()
        self.initUI2()


    def initUI2(self):

        self.vbox2 = QtGui.QVBoxLayout()

        self.setLayout(self.vbox2)       
        self.setGeometry(300, 300, 200, 120)
        self.setWindowTitle('Image Bits')
        self.show()

    def main2():
        w2 = QtGui.QWidget()
        w2.resize(150, 150)
        w2.move(300, 300)
        w2.setWindowTitle('Window2')
        w2.show()

在我的主类中被这个函数调用:

    def FN_OpenWindow2(self):            
        win2 = Window2()
        #Display it
        win2.show()

此按钮在同一类中调用的函数:

self.NextButton = QtGui.QPushButton("Next")
self.NextButton.setCheckable(True)
self.NextButton.clicked[bool].connect(self.FN_OpenWindow2)

我一定不能完全错,因为我确实已经打开了第二个窗口并打开......几秒钟......我想只有按钮被“推”的时间。

所以这是我的问题,我如何保持对Window2类实例的引用?所以一旦被称为它留在这里(如果我再次按下相同的按钮,我将破坏/创建刷新,这是我的计划)。

希望我很清楚,如果不是道歉,我对Python很新。

谢谢!

1 个答案:

答案 0 :(得分:0)

正如你所说,你只需要继续引用新窗口。 例如。只需将其存储在主类中:

def FN_OpenWindow2(self):            
    self.win2 = Window2()
    #Display it
    self.win2.show()

或者,如果您可以有多个,请将其列为一个列表:

def __init__(self,...):
    # initialize an empty list in you main class' init function
    self.secondaryWindows = []

def FN_OpenWindow2(self):            
    win2 = Window2()
    #Display it
    win2.show()
    # append the window to the list
    self.secondaryWindows.append(win2)

请注意,当您再次关闭这些小部件时,引用将保留。 所以可能需要添加额外的逻辑来清除那时的引用。