(PY) Biblioteka PyQt 5 (Dialogs)*

Biblioteka PyQt 5 (Dialogs)

Wbudowane okna dialogowe

  • QMessageBox.warning(self, „Nazwa okna dialogowego„, „Treść dialogu„) – Tworzy a następnie wywołuje wbudowane okno dialogowe. PyQt udostępnia następujące wbudowane okna dialogowe:
    • about, critical, information, question, warning.

Przykładowy kod

import sys
from PyQt5.QtWidgets import (
    QApplication, QWidget,
    QMainWindow, QMessageBox,
    QPushButton, QVBoxLayout)


class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super().__init__(parent)

        # Dodaje nazwę okna:
        self.setWindowTitle("RKKR")
        # Określa wielkość okna aplikacji (Zmiana wielkości okna jest możliwa):
        self.resize(300,100)

        myButton = QPushButton("Press Me!")
        myButton.clicked.connect(self._clicked)

        myLayout = QVBoxLayout(self)
        myLayout.addWidget(myButton)

        myWidget = QWidget()
        myWidget.setLayout(myLayout)
        self.setCentralWidget(myWidget)

    def _clicked(self):
        # Wbudowane okna dialogowe:
        myButton = QMessageBox.warning(self, "Nazwa okna dialogowego", "Treść dialogu")
        
        # Wyświetlanie tekstu po wciśnięciu przycisku Ok:
        if myButton == QMessageBox.Ok:
            print("Ok")

def main():
    application = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    application.exec_()

if __name__ == "__main__":
    main()

Podstawowe okna dialogowe

  • Dialog.setWindowTitle(String) – Określa nazwę okna dialogowego.
  • Dialog.setText(String) – Określa zawartość okna dialogowego (Wiadomość jaka będzie wyświetlana).
  • Dialog.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) – Określa przyciski jakie będą wyświetlane pod wiadomością okna dialogowego. Ilość przycisków można zmieniać dodając je po znaku „|”. Biblioteka PyQt udostępnia następujące rodzaje wbudowanych przycisków:
    • Ok, Open, Save, Cancel, Close, Discard, Apply, Reset, RestoreDefaults, Help, SaveAll, Yes, YesToAll, No, NoToAll, Abort, Retry, Ignore, NoButton.
  • Dialog.setIcon(QMessageBox.Information) – Określa ikonę przypisaną do okna dialogowego. Biblioteka PyQt udostępnia następujące rodzaje ikon wbudowanych:
    • NoIcon, Question, Information, Warning, Critical.

Przykładowy kod

import sys
from PyQt5.QtWidgets import (
    QApplication, QWidget,
    QMainWindow, QMessageBox,
    QPushButton, QVBoxLayout)


class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super().__init__(parent)

        # Dodaje nazwę okna:
        self.setWindowTitle("RKKR")
        # Określa wielkość okna aplikacji (Zmiana wielkości okna jest możliwa):
        self.resize(300,100)

        myButton = QPushButton("Press Me!")
        myButton.clicked.connect(self._clicked)

        myLayout = QVBoxLayout(self)
        myLayout.addWidget(myButton)

        myWidget = QWidget()
        myWidget.setLayout(myLayout)
        self.setCentralWidget(myWidget)

    def _clicked(self, data):
        print("RKKR", data)

        # Wywołuje domyślne okno dialogowe:
        myMessage = QMessageBox(self)
        # Określa nazwę okna dialogowego:
        myMessage.setWindowTitle("Uwaga!")
        # Określa wiadomość zawartą w oknie dialogowym:
        myMessage.setText("Podany adres IP jest nieosiągalny!")
        # Przypisuje wskazane przyciski Button do okna dialogowego:
        myMessage.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
        # Przypisuje ikone do okna dialogowego:
        myMessage.setIcon(QMessageBox.Information)

        # Obsługa przycisków:
        myButton = myMessage.exec_()

        # Wyświetlanie tekstu po wciśnięciu przycisku Ok:
        if myButton == QMessageBox.Ok:
            print("Ok")
        # Wyświetlanie tekstu po wciśnięciu przycisku Cancel:
        elif myButton == QMessageBox.Cancel:
            print("Cancel")

def main():
    application = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    application.exec_()

if __name__ == "__main__":
    main()

Własne okna dialogowe

  • DialogButton.accepted.connect(Function) – Wskazana akcja zostanie aktywowana po naciśnięciu prze użytkownika przycisku button, z przypisaną rolą AcceptRole bądź YesRole.
  • DialogButton.rejected.connect(Function) – Wskazana akcja zostanie aktywowana po naciśnięciu prze użytkownika przycisku button, z przypisaną rolą RejectRole bądź NoRole.
  • DialogButton.clicked.connect(Function) – Wskazana akcja zostanie aktywowana po naciśnięciu prze użytkownika jakiegokolwiek przycisku button.

Przykładowy kod

import sys
from PyQt5.QtWidgets import (
    QApplication, QDialog, QDialogButtonBox, QLabel,
    QMainWindow, QWidget,
    QPushButton, QVBoxLayout)


class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super().__init__(parent)

        # Dodaje nazwę okna:
        self.setWindowTitle("RKKR")
        # Określa wielkość okna aplikacji (Zmiana wielkości okna jest możliwa):
        self.resize(300,100)

        myButton = QPushButton("Press Me!")
        myButton.clicked.connect(self._clicked)

        myLayout = QVBoxLayout(self)
        myLayout.addWidget(myButton)

        myWidget = QWidget()
        myWidget.setLayout(myLayout)
        self.setCentralWidget(myWidget)

    def _clicked(self):
        # Wywołanie nowego okna dialogowego:
        myMessage = MyDialog()
        myMessage.exec_()

class MyDialog(QDialog):

    def __init__(self, parent=None):
        super().__init__(parent)

        # Dodaje nazwę nowego okna dialogowego:
        self.setWindowTitle("My own dialog!")
        # Definiuje wykorzystywane przyciski Button:
        Buttons = QDialogButtonBox.Ok | QDialogButtonBox.Cancel

        # Przypisuje wskazane przyciski Button do okna dialogowego:
        buttonBox = QDialogButtonBox(Buttons)
        # Dodaje akcje do przycisków button:
        buttonBox.accepted.connect(self._accepted)
        buttonBox.rejected.connect(self._rejected)

        # Tworzy nowy layout:
        self.myLayout = QVBoxLayout()
        dialogMessage = QLabel("Coś poszło nie tak, dobrze?")
        self.myLayout.addWidget(dialogMessage)
        self.myLayout.addWidget(buttonBox)
        self.setLayout(self.myLayout)

    def _accepted(self):
        print("Accepted")
        self.close()

    def _rejected(self):
        print("Rejected")
        self.close()

def main():
    application = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    application.exec_()

if __name__ == "__main__":
    main()

Pozostałe tematy związane z bibliotekami / modułami Python

Podstawowe

Rozszerzone

SQL

PyQt 5

Automatyzacja

Data Mining

PDFPRINT

Robert T Kucharski

Cisco Network Engineer in GPW.

Dodaj komentarz