Python 在循环中多次打开窗口
我希望有人能帮助我 目标是: 单击按钮“button_trog”时,应启动一个循环,根据从spinbox“spinbox_count”中选择的数字,打开一个新窗口一段特定的时间,以提供输入内容的可能性 情况: 到目前为止,这是可行的,但问题是窗口只打开一次 当我点击accepted按钮时,它应该会再次打开 我不知道下一步该尝试什么,因为我的理解是它应该再次打开窗口。。。 我的意思是循环正在工作,我用print()函数试过了 这是主窗口文件中的代码: 代码:spinbox\u计数Python 在循环中多次打开窗口,python,loops,user-interface,pyqt5,window,Python,Loops,User Interface,Pyqt5,Window,我希望有人能帮助我 目标是: 单击按钮“button_trog”时,应启动一个循环,根据从spinbox“spinbox_count”中选择的数字,打开一个新窗口一段特定的时间,以提供输入内容的可能性 情况: 到目前为止,这是可行的,但问题是窗口只打开一次 当我点击accepted按钮时,它应该会再次打开 我不知道下一步该尝试什么,因为我的理解是它应该再次打开窗口。。。 我的意思是循环正在工作,我用print()函数试过了 这是主窗口文件中的代码: 代码:spinbox\u计数 self.spi
self.spinbox_count = QtWidgets.QSpinBox(self.centralwidget)
self.spinbox_count.setGeometry(QtCore.QRect(370, 430, 70, 30))
font = QtGui.QFont()
font.setPointSize(15)
self.spinbox_count.setFont(font)
self.spinbox_count.setObjectName("spinbox_count")
代码:按钮
self.button_trog = QtWidgets.QPushButton(self.centralwidget)
self.button_trog.setGeometry(QtCore.QRect(530, 390, 200, 100))
font = QtGui.QFont()
font.setPointSize(15)
self.button_trog.setFont(font)
self.button_trog.setObjectName("button_trog")
self.button_trog.clicked.connect(self.scanning)
代码:def扫描
def scanning(self):
count = self.spinbox_count.value()
self.lcount = 0
if count < 1:
print("Bitte geben Sie eine Stückzahl ein!")
while self.lcount < count:
self.window = QtWidgets.QDialog()
self.ui = Ui_window_scanning()
self.ui.setupUi(self.window)
self.window.show()
self.lcount = self.lcount + 1
提前感谢问题是,
self.window
属性在每次while循环时都会被覆盖,并且由于对话框没有其他引用,它会被垃圾回收(也称为删除)。你看不到只有一个窗口,你看到的是最后一个窗口
有两种类似的解决方案:
- 将窗口添加到持久列表中,以便无法删除它们李>
- 设置窗口的父级李>
def scanning(self):
# ...
self.window = QtWidgets.QDialog(self)
def扫描(自):
# ...
self.window=qtwidts.QDialog(self)
注意,这是非常重要的:上面的修改是基于这样的假设,即您正确地使用了QWidget的子类(例如QMainWindow),并且您没有使用pyuic工具生成的修改过的文件(或试图模仿其行为)并在其创建的任何类中实现扫描
(通常命名为Ui\u MainWindow
或类似名称,并基于简单的python对象
)
如果你这样做(我害怕的话),考虑一下:
self
不是QWidget的子类,任何QWidget实例都需要它作为父参数李>
请考虑由于懒惰(“我已经写了很多代码!”)而继续使用修改的PYIC文件的尝试,或者对QT子类的正确使用缺乏理解,只会导致在一定程度上不断增加的问题和问题。无论如何,这将迫使您切换到常用方法,但此时将更加痛苦和困难。请提供一份报告,请详细阅读并检查您的缩进。
def scanning(self):
# ...
self.window = QtWidgets.QDialog(self)