PyQt5按钮单击在导入的类中不起作用

时间:2015-09-24 15:42:19

标签: python pyqt5

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

然后我点击了老鼠的pushButton,它不起作用,没有调用BtnClck1方法,也没有打印 - SecondWindowPrint。

但如果我以编程方式调用PushButton,则可以正常工作。

如果我从index.py

进行连接,PushButton工作正常

以下是GitHub上的完整代码github.com/m0x3/test1

这是代码:

index.py 导入系统 来自PyQt5 import uic 来自PyQt5.QtWidgets导入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')

1 个答案:

答案 0 :(得分: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