PyQt5 按钮点击在导入中不起作用 class
PyQt5 button click not work in imported class
在文件 index.py 中,这一行工作正常,
但在导入的 class 中,类似的行将不起作用!我不明白为什么。
然后我用鼠标点击 pushButton,它不起作用,没有调用 BtnClck1 方法,也没有 print-SecondWindowPrint。
但是如果我以编程方式调用 PushButton click,它工作正常。
如果我从 index.py
建立连接,按钮工作正常
这是 GitHub github.com/m0x3/test1
上的完整代码
代码如下:
index.py
导入系统
从 PyQt5 导入 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')
MainWindow.mn_general.pushButton_2 调用 form1.BtnClck1 作为静态函数。目前尚不清楚,但它有效。
如果对您有好处,您可以将 form1.BtnClck1 定义为静态函数:
class form1:
def __init__(self, obj):
...........
@staticmethod
def BtnClck1():
print('SecondWindowPrint')
另一种方法(更好的方法)是将 form1 class 的实例放在 MainWindow class 的 public 变量中。您可以像这样更改 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
在文件 index.py 中,这一行工作正常, 但在导入的 class 中,类似的行将不起作用!我不明白为什么。
然后我用鼠标点击 pushButton,它不起作用,没有调用 BtnClck1 方法,也没有 print-SecondWindowPrint。
但是如果我以编程方式调用 PushButton click,它工作正常。
如果我从 index.py
建立连接,按钮工作正常这是 GitHub github.com/m0x3/test1
上的完整代码代码如下:
index.py 导入系统 从 PyQt5 导入 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')
MainWindow.mn_general.pushButton_2 调用 form1.BtnClck1 作为静态函数。目前尚不清楚,但它有效。 如果对您有好处,您可以将 form1.BtnClck1 定义为静态函数:
class form1:
def __init__(self, obj):
...........
@staticmethod
def BtnClck1():
print('SecondWindowPrint')
另一种方法(更好的方法)是将 form1 class 的实例放在 MainWindow class 的 public 变量中。您可以像这样更改 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