PyQt4, генерирующий несколько экземпляров одного и того же виджета?

#python #multithreading #pyqt #pyqt4

#python #многопоточность #pyqt #pyqt4

Вопрос:

Я создаю графический интерфейс PyQt4, который позволяет пользователю в qmainwindow вводить некоторые начальные параметры, а затем нажимать кнопку «Пуск», чтобы запустить программу. Когда они нажимают кнопку «Пуск», появляется новое окно, отображающее параметры, и программа запускается. Я бы хотел, чтобы пользователь мог запускать несколько экземпляров программы. Однако при изменении параметров в qmainwindow и повторном нажатии кнопки «Пуск» первое окно программы исчезает.

Есть ли способ, чтобы кнопка запуска вызывала второе окно, которое запускается одновременно с первым окном? Я предполагаю, что это будет что-то вроде потоковой передачи, но из того, что я прочитал, PyQt4, похоже, не имеет метода для потоковой передачи в приложении.

Любая помощь будет высоко оценена.

Комментарии:

1. Можете ли вы опубликовать какой-нибудь код, показывающий, что вы пробовали?

Ответ №1:

Я предполагаю, что вы сохраняете ссылку на вновь созданное окно в той же переменной. Если вы хотите создать несколько окон, попробуйте сохранить ссылку на это окно в отдельной переменной, т.е. Каждое окно должно иметь свою собственную ссылочную переменную.

 def showWindow(self):
    self.child = Window(self)
    self.child.show()
 

Если это ваша ситуация, то первое окно потеряет свою ссылку, как только showWindow() будет выполнено во второй раз. Потому self.child что он будет содержать ссылку на второе окно, что приведет к закрытию первого окна, поскольку в первом окне нет ссылочной ссылки. Как только виджет потеряет ссылку в Qt, виджет будет уничтожен. Чтобы преодолеть эту проблему, поддерживайте список переменных:

 # declare a list in __init__ as self.widgetList = []

def showWindow(self):
    win = Window(self):
    win.show()
    self.widgetList.append(win)