【问题标题】:Multiple messages in screen PyQt5屏幕PyQt5中的多条消息
【发布时间】:2018-05-22 12:21:33
【问题描述】:

这是我的代码

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(test) 中的打印行,但如果我关闭窗口,然后我再次单击连接按钮,再次打开窗口并再次按下“getvmsButton”,控制台显示 2 条消息而不是 1 条。如果我重复该过程,则会显示更多消息。

当我关闭和打开窗口多次时,我应该更改什么以仅显示一条消息?

【问题讨论】:

标签: python qt


【解决方案1】:

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

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 文件,代码可能不适用于您的。

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2021-06-02
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多