Creating and configuring a dialog window with Python and PyQt “QDialog”

Posted by


Python и PyQt являются мощными инструментами для создания графических пользовательских интерфейсов. Один из ключевых элементов графического интерфейса – это диалоговые окна, которые позволяют взаимодействовать с пользователем для получения информации или выполнения определенных действий. В этом уроке мы рассмотрим, как создать и настроить диалоговое окно используя PyQt.

Для начала убедитесь, что у вас установлены Python и PyQt на вашем компьютере. Если они не установлены, вы можете установить их с помощью пакетного менеджера pip:

pip install PyQt5

Шаг 1: Импорт библиотек

Для создания диалогового окна сначала нужно импортировать необходимые библиотеки:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QDialog

Шаг 2: Создание класса для диалогового окна

Далее создадим класс, который будет представлять диалоговое окно. Для этого мы можем унаследоваться от класса QDialog, который представляет стандартное диалоговое окно в PyQt:

class MyDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("My Dialog")

Здесь мы создали класс MyDialog, который унаследован от класса QDialog и установили заголовок для диалогового окна.

Шаг 3: Создание экземпляра диалогового окна

Теперь мы можем создать экземпляр класса MyDialog и отображать его на экране:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = MyDialog()
    dialog.exec_()
    sys.exit(app.exec_())

Здесь мы создаем экземпляр приложения QApplication, создаем экземпляр диалогового окна MyDialog и вызываем метод exec_() для отображения диалогового окна на экране.

Шаг 4: Настройка диалогового окна

Чтобы настроить диалоговое окно, мы можем добавить различные элементы управления, такие как кнопки, поля ввода или метки. Например, мы можем добавить кнопку "OK" для закрытия диалогового окна:

class MyDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("My Dialog")

        button = QPushButton("OK", self)
        button.clicked.connect(self.close)

Здесь мы создаем кнопку с надписью "OK" и подключаем событие нажатия кнопки к методу close() для закрытия диалогового окна.

Шаг 5: Запуск диалогового окна

Наконец, запустим наше диалоговое окно:

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = MyDialog()
    dialog.exec_()
    sys.exit(app.exec_())

Теперь у вас есть полностью настроенное диалоговое окно, где вы можете добавить любые элементы управления и функциональность по вашему усмотрению. При необходимости вы также можете создать собственные классы диалоговых окон, наследуя их от класса QDialog и настраивая их по своему усмотрению.

0 0 votes
Article Rating

Leave a Reply

16 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@АлексД-о3ю
1 hour ago

Купился на на название, но не могу назвать видео полезным для себя (Пишу код на Pyqt без использования designer). Что мне, как изучающему нужно (диалоговое окно требуется вынести классом в отдельный файл): 1) Основные (обязательные вещи для создания пользовательского диалогового окна) – т.е. каркас, который в любом случае будет создан и без которого оно не будет функционировать или будет функционировать не правильно – собственно заполнение класса диалогового окна. 2) Как из основного файла программы вызвать это диалоговое окно, 3) Как получить данные, которые человек внес или выбрал в диалоговом окне обратно в основную программу.
Это основные вещи, их нужно объяснять в первую очередь, на них держится вся работа. Внимание! Вот это нужно подавать первым. Вместо этого автор вдарился в какие то специфические забугорные особенности, базу данных и 90% времени набирал текст (озвучивая текст набираемый руками) Зачем? Кому это надо? Это полная дребедень, которая портит даже оформление в power point. Пользование designer докидывает много лишнего в итоговый файл. Я не получил ответов на свои вопросы. Думаю, полезу в тексты программы, попробую распутать клубок и понять, как это все работает. Смотреть видео особенностей работы с базой данных без базиса, когда в интерпретаторе отображается узкий по высоте фрагмент кода то еще дело. И что же? Захожу на сайт открываю разделы содержащие код. Народ матом кроет автора за то что он запоролил их все. Действительно зачем паролить что-то если сам потом этим материалом делишься? Логика бесподобная.

@konstantingagarin4023
1 hour ago

Большое спасибо. Интересное и очень полезное видео. Прозвучало, что исходники можно найти на портале. Имелся ввиду архив проекта PyCharm (PyScientistNotes v4.1) или где-то есть исходники отдельно для каждого видео?

@cgrem5373
1 hour ago

Спасибо большое. Долго бодался с запуском дочернего окна, нагородил костылей. После вашего объяснения понял, что можно проще, намного проще!

@Dostoynowb
1 hour ago

спасибо большое за ваш полезный труд!

@ЕвгенийБабаев-х8х
1 hour ago

Сергей добрый день!

Изучаю pyQt по Вашим роликам.

Я пытаюсь сделать программу с диалоговым окном, в котором при нажатии кнопки меняет текст в основном окне.

На видео https://youtu.be/mt-gqU-q4B8?t=783 говорится что в класс диалогового окна нужно передать ссылку основного окна и там у вас это mainwindow, вот тут у меня возникла проблема что мне передавать в этот класс не совсем понятно. Если вас не затруднит подскажите пожалуйста.

@kitkamak115
1 hour ago

Хорошие шпаргалки по PyQt5 (для PySide2 тоже подходят), смотрю их когда на официальной документации не хватает наглядности.

@АлексФри-з2у
1 hour ago

День добрый, как всегда вы на высоте. Спасибо за очередной урок. Так скоро весь Pyqt5 освоим. Так держать.

@an0ncer
1 hour ago

Огромное спасибо
Только у тебя нашел

@ОльгаКузнецова-б2ж
1 hour ago

Спасибо за видео! Вы нашли способ удаления легенды вместе с графиком?

@картес-ж7ж
1 hour ago

Очень странно это. почему у такого человека как вы, так мало подписчиков на канале, я просто не пойму.
На этом канале настолько полезная информация хранится, что за это у вас должно быть более 100 тыс подписчиков

@РусланХафизов-м6д
1 hour ago

Только начинаю изучать, спасибо за видео!

@obehobeh9984
1 hour ago

Спасибо. Все очень доступно.

@лигасмят
1 hour ago

Спасибо огромное за обучение. Кратко и понятно. Спасибо за пароль. Благодаря Вам узнал много нового и полезного.

@temych02
1 hour ago

Большое спасибо за видео!

@PyScientist
1 hour ago

Ссылка на архив проекта PyScientistNotes4.0
http://pyscientist.ucoz.net/load/arkhiv_proekta_pycharm_pyscientistnotes_v4_0/1-1-0-8

@PyScientist
1 hour ago

class DialogWindowTableFromSqlDb(QDialog, TableDialogObj):

def __init__(self, tables_in_db, mainwindow):

QDialog.__init__(self)

self.setupUi(self)

self.mainwindow = mainwindow

for table in tables_in_db:

add_simple_element_in_QListWidget(self.listWidget, table)

self.buttonBox.accepted.connect(self.acept_data)

self.buttonBox.rejected.connect(self.reject_data)

def acept_data(self):

selected_item_text = self.listWidget.currentItem().text()

self.mainwindow.workspace_data_text_line.setPlainText(selected_item_text)

self.close()

def reject_data(self):

self.close()

16
0
Would love your thoughts, please comment.x
()
x