屏幕PyQt5

时间:2018-05-22 12:21:33

标签: python qt

这是我的代码

app = QApplication(sys.argv)
loginWindow = loadUi('~/mainwindow.ui')
okconnect = loadUi('~/okconnect.ui')



def prueba2(test):
    print(test + " Testing2")



def prueba(test):
    print (test)

    okconnect.show()
    okconnect.getvmsButton.clicked.connect(lambda: prueba2(test))



loginWindow.show()

loginWindow.connectButton.clicked.connect(lambda: prueba("test"))

sys.exit(app.exec_())

当我按下"连接"按钮,打开一个新窗口,带一个按钮," getvmsButton",当我按下此按钮时,它在控制台中显示def prueba2(测试)中的打印行,但如果我关闭窗口,然后我再次点击连接按钮,再次打开窗口和" getvmsButton"再次按下,控制台显示2条消息而不是1.如果我重复此过程,将显示更多消息。

当我关闭并打开几次窗口时,我应该更改哪些只显示一条消息?

1 个答案:

答案 0 :(得分:0)

当您用'x'关闭GUI时并不意味着您断开了按钮点击信号,因此,每次单击“连接”按钮时,loginWindow将创建一个新的button.clicked事件并保留旧事件。对此的快速解决方案是为“x”点击定义一个close事件。这里提供的只是一种关闭旧信号事件的方法。

from PyQt5.QtWidgets import QWidget


OKConnect(QWidget):
    def __init__(self):
        super().__init__()
        self.okconnect = loadUi('~/okconnect.ui')
        self.okconnect.closeEvent = self.closeEvent

    def closeEvent(self, event):
        print("testing2 closing")
        # to close the old getvmsButton signals
        self.okconnect.getvmsButton.disconnect()


# Here below is exactly your code

app = QApplication(sys.argv)
loginWindow = loadUi('~/mainwindow.ui')
okconnect = OKConnect()

def prueba2(test):
    print(test + " Testing2")

def prueba(test):
    print (test)

    okconnect.show()
    okconnect.getvmsButton.clicked.connect(lambda: prueba2(test))


loginWindow.show()

loginWindow.connectButton.clicked.connect(lambda: prueba("test"))

sys.exit(app.exec_())

我不确定您的.ui文件,代码可能不适用于您的。