【问题标题】:PyQt5 button click not work in imported classPyQt5按钮单击在导入的类中不起作用
【发布时间】:2015-12-22 07:20:15
【问题描述】:

在 index.py 文件中,这一行工作正常, 但在导入类中,类似的行将不起作用!我不明白为什么。

然后我用鼠标点击按钮,它不起作用,没有调用 BtnClck1 方法,也没有 print-SecondWindowPrint。

但是如果我以编程方式调用 PushButton click,它工作正常。

如果我从 index.py 进行连接,PushButton 可以正常工作

这里是 GitHub github.com/m0x3/test1 上的完整代码

代码如下:

index.py 导入系统 从 PyQt5 导入 uic from PyQt5.QtWidgets import QMainWindow, QApplication

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # Set up the MainWindow from Designer.
        uic.loadUi("mw.ui", self)

        # Connect up the buttons.
        self.pushButton.clicked.connect(self.BtnClck)

        self.show()

    def BtnClck(self):
        # Set up the ContentWindow from Designer.
        from form1 import form1
        form1(self.mn_general)
        self.mn_general.pushButton_2.clicked.connect(form1.BtnClck1) #this works fine

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())

form1.py

from PyQt5 import uic

class form1:
    def __init__(self, obj):
        super().__init__()
        uic.loadUi("form1.ui", obj)

        obj.pushButton.setText('TextChanged on init') #this works fine
        obj.pushButton.clicked.connect(self.BtnClck1) #this NOT works
        obj.pushButton.click() #this works fine!

    def BtnClck1(self):
        print('SecondWindowPrint')

【问题讨论】:

  • 您的代码很清楚,但我不知道什么不起作用。当你说“行不通”是什么意思?一个错误?要不然是啥。显示不起作用的代码。
  • 然后我用鼠标单击 pushButton,它不起作用,没有调用 BtnClck1 方法,也没有调用 print-SecondWindowPrint 但是如果我以编程方式调用 PushButton click,它工作正常。如果我从 index.py 制作 connect,PushButton 工作正常这是 GitHub 上的完整代码 github.com/m0x3/test1

标签: python pyqt5


【解决方案1】:

MainWindow.mn_general.pushButton_2 调用 form1.BtnClck1 作为静态函数。目前尚不清楚,但它有效。 如果对您有好处,您可以将 form1.BtnClck1 定义为静态函数:

class form1:
def __init__(self, obj):
    ...........

@staticmethod
def BtnClck1():
    print('SecondWindowPrint')

另一种方法(更好的方法)是将 form1 类的实例放在 MainWindow 类的公共变量中。您可以像这样更改 Index.py 中的 BtnClck 函数:

    def BtnClck(self):
    # Set up the ContentWindow from Designer.
    from form1 import form1
    self.Form=form1(self.mn_general,5)
    self.mn_general.pushButton_2.clicked.connect(form1.BtnClck1) #this works fine

【讨论】:

  • 继承 QObject 时没有任何变化 :(
猜你喜欢
  • 2020-07-20
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2021-08-20
  • 2015-02-06
相关资源
最近更新 更多