Прежде всего, ваш код содержит синтаксическую ошибку из-за непоследовательного отступа, который является проблемой в python.
Что еще более важно, у вас есть локальный объект, созданный в методе execute, и как только ваш метод завершится, локально созданный объект будет уничтожен.
Это потому, что метод show() для qwidget не блокирует. Они просто поставят событие в очередь для цикла событий Qt, чтобы обработать запрос, когда цикл событий станет доступным.
Вы можете сделать переменную с областью действия класса в MainWindow, но тогда вы можете переместить создание TaskWindow в метод init, чтобы избежать ненужного создания объекта каждый раз, когда испускается сигнал, и вы будете отображать TaskWindow только в методе выполнения следующим образом. :
def __init__(self, parent = None):
super(MainWindow, self).__init__(parent)
...
self.execTaskAct = QtGui.QAction("execute", self, triggered=self.executeTask)
...
self.task = TaskWindow()
def executeTask(self):
task.show()
Если вы действительно хотите создавать новый объект каждый раз, когда запускается выполнение, вы можете просто добавить ключевое слово «self», чтобы сделать каждый вновь созданный объектный класс ограниченным. Тем не менее, убедитесь, что вы не оставляете окно без ссылок в неопределенном поведении. Итак, вы бы написали что-то вроде этого:
def executeTask(self):
self.task = TaskWindow()
Тогда вам нужно будет удалить вызов show() из метода инициализации TaskWindow.
При этом я бы также назначил родителя для TaskWindow для полноты, либо MainWindow, либо сам объект приложения.
self.task = TaskWindow(self)
Также обратите внимание, что если вы хотите видеть только одно окно, вы можете скрыть MainWindow, вызвав его метод hide(). Если вы хотите показать оба одновременно, вы можете рассмотреть TaskDialog, а не два MainWindow.
Кроме того, как только вы закончите выполнение, вы можете явно скрыть () ваше TaskWindow, если ваш пользователь не должен закрывать его явно. Это зависит от вашего варианта использования.
person
lpapp
schedule
14.01.2014
self
перед переменнойtask
.self.task = TaskWindow()
- person qurban   schedule 14.01.2014