Подокно GUI MDI отображается только при первом нажатии кнопки

Я надеюсь, что у меня есть простой вопрос здесь. Я создал очень большой графический интерфейс с QT Designer и подокном для области MDI. Я использовал pyuic5, чтобы преобразовать его из файла .ui в файл .py. Я написал функцию для открытия этого подокна при нажатии кнопки. Первый раз нажимаю на кнопку, работает нормально. Проблема, с которой я сталкиваюсь, заключается в том, что при нажатии кнопки во второй раз отображается пустое подокно в области MDI. Как мне сделать так, чтобы он отображался правильно при каждом нажатии кнопки. Я прикреплю код того, как я запускаю подокно ниже. Любые советы будут очень признательны. Спасибо за ваше время и вашу помощь

Код, который вызывается при нажатии кнопки

def windowaction(self):

    sub = QtWidgets.QMdiSubWindow()
    sub.setWidget(self.Load_Input)
    sub.setObjectName("Load_Input_window")
    sub.setWindowTitle("Load Input")
    self.mdiArea.addSubWindow(sub)
    sub.show()

Первое нажатие кнопки Первое нажатие кнопки

Второе нажатие кнопки Второе нажатие кнопки


person laxer    schedule 04.05.2017    source источник


Ответы (1)


Проблема возникает при добавлении одного и того же объекта виджета в разные QMdiSubWindow, вы должны создать новый объект и добавить его в новый QMdiSubWindow.

def windowaction(self):
    sub = QtWidgets.QMdiSubWindow()
    Load_Input = LoadInput()
    sub.setWidget(Load_Input)
    sub.setObjectName("Load_Input_window")
    sub.setWindowTitle("Load Input")
    self.mdiArea.addSubWindow(sub)
    sub.show()
person eyllanesc    schedule 05.05.2017
comment
Благодарю за ваш ответ. Когда я пробую этот код, я получаю сообщение об ошибке TypeError: 'QWidget' object is not callable". Я заметил, что единственная разница в том, что у вас Load_Input = LoadInput(), а у меня эквивалент Load_Input = LoadInput. Какая разница (). Кроме того, поскольку я создаю новый объект, было бы хорошо удалить старый перед созданием нового? В конце концов, я хотел бы, чтобы только одно из окон ввода Load было открыто одновременно. - person laxer; 05.05.2017
comment
В своем коде вы должны были сделать что-то похожее на self.Load_Input = , вы могли бы показать мне эту строку кода или поделиться своим проектом через github, dropbox или подобное. - person eyllanesc; 05.05.2017
comment
Я только что сделал репозиторий github, который можно найти здесь. Также функция находится в файле Main.py. Я пытаюсь разделить все это github.com/simplesports/WorkHelper - person laxer; 05.05.2017
comment
Вы можете поделиться файлом ui. - person eyllanesc; 05.05.2017
comment
Вы должны отделить дизайн каждого окна, создать новую форму по следующей ссылке Я выделил, Когда вы создаете объект класса myclass, вы должны делать что-то похожее на obj = myclass(), вместо этого вы использовали уже созданный объект. - person eyllanesc; 05.05.2017
comment
Это фантастика!! Большое спасибо! Вы действительно многому меня научили, за что я вам очень благодарна! - person laxer; 05.05.2017