@flabot

PyQt5 Python, открытие виджета при выборе пункта menubar, как реализовать?

Добрый день, решил перейти с easygui(думал на нём научится с гуи работать, но такое себе) на pyqt5

Собрал 2 макета в "designer"
1 - Меню-бар(glav.ui), и там выпадающий список из кнопок QAction(например action_1, action_2)
2 - Окно с виджетом(widget.ui) там просто текст.

Как при нажатии на action2 открыть widget.ui

Хелп(

app = QtWidgets.QApplication([])
app.setStyleSheet(style)
win = uic.loadUi("glav.ui")
 
win.show()
sys.exit(app.exec())

Стили думаю смысла скидывать нет
  • Вопрос задан
  • 878 просмотров
Решения вопроса 1
gscraft
@gscraft
Программист, философ
Не помешает, конечно, привести код форм. Вы должны дать действию имя, и найти его через объект, полученный после загрузки ui, и подключить к сигналу действия — слот:
win = uic.loadUi("main_window.ui")
action = win.findChild(QAction, "your_action_name")
action.triggered.connect(your_object.your_slot)


Вы можете определить свой класс окна, чтобы задать в нем обработчики:
class MainWindow(QtWidgets.QMainWindow): # ваш базовый класс
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('main_window.ui', self)

        action = self.findChild(QAction, "your_action_name")
        action.triggered.connect(self.your_slot)

        self.show()

    def your_slot(self):
        pass


Создать новое окно можно таким же образом:
widget = uic.loadUi("widget.ui")
widget.show()

Однако, не забудьте, что если widget создан внутри слота-обработчика, ссылка будет уничтожена по завершению функции. Вы можете привязать виджет к классу главного окна (self.widget = None), затем в обработчике действия проверяя, создан и открыт ли он.

PS старайтесь избегать транслитерации и "неполноценных" имен объектов, вроде "glav". Это в первую очередь показывает неаккуратность кода и послужит ошибкам в будущем.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы