我在使用 pyqt5 时遇到问题。我有这段代码来实例化我的类并打开我的窗口,而无需在 show 方法之后关闭(因为 gc)。
def user_crud():
global crud
crud = TCrudUsuario()
crud.show()
它工作得很好,但是在TCrudUsuario类上,我有一些按钮连接到带有参数的方法,所以我使用的是lambda(尝试部分,但发生同样的问题),如下所示:
self.btnNovo.clicked.connect(lambda: self.manage_user(1))
问题是:如果我使用lambda或部分连接到我的方法manage_user(),它允许我打开TCrudUsuario类的多个实例,打开两个或多个窗口。但是,如果我删除连接方法,它只会打开1个窗口。我的目标是只允许一个实例/一个窗口。有谁知道为什么会发生这种情况?
可重现代码:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_test(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setObjectName("test")
self.resize(380, 250)
self.btntest = QtWidgets.QPushButton(self)
self.btntest.setGeometry(QtCore.QRect(70, 190, 100, 40))
self.btntest.setText('open other window')
self.btntest.clicked.connect(open_otherwindow)
class OtherWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.setObjectName("otherwindow")
self.resize(250, 250)
self.button = QtWidgets.QPushButton(self)
self.button.setGeometry(QtCore.QRect(70, 100, 100, 40))
self.button.setText('hello')
self.button.clicked.connect(lambda: self.nothing(1))
def nothing(self, arg):
pass
def open_otherwindow():
global w
w = OtherWindow()
w.show()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle('Fusion')
test = Ui_test()
test.show()
sys.exit(app.exec_())
紫衣仙女
相关分类