Рубрики
Без рубрики

Библиотека GUI для Python

В целом, выбирая инструментарий GUI для приложения может быть сложно. Программисты, которые используют Python (… с меткой Python.

В целом, выбирая инструментарий GUI для приложения может быть сложно.

Программисты, которые используют Python (и многие языки, а также) имеют широкий спектр GUI Toolkits на выбор, и у каждого есть свои преимущества и недостатки.

Некоторые являются быстрее, чем другие, некоторые меньшие, некоторые легко устанавливать, а некоторые больше подходят для перекрестной платформы (для этого, также обратите внимание, что некоторые определенные особенности поддерживают функции, необходимые для удовлетворения). Конечно, различные библиотеки имеют различные лицензии соответствующим образом.

Модули Python GUI

Tkinter.

Для программистов Python выбор GUI по умолчанию является Tk (связанный через TKinter) – по очевидным причинам. Tkinter и Простой IDE были написаны основателями Python, и они пришли в качестве выбора по умолчанию для большинства распределений Python.

Стандартная документация Python обсуждает TKinter, но не обрабатывает никаких других привязок GUI. Это было намеренно! Сказать наименее, если TK и Tkinter не были такими плохими, программисты не будут причины искать альтернативы.

Pyqt.

PYQT имеет гораздо больше преимуществ, чем TKinter (который также имеет несколько недостатков);

PYQT – это привязка Python для Framework QT. QT и PYQT полностью ориентированы на объективные объекты в дизайне; и Qt предоставляет хорошо разработанную коллекцию блоков зданий в окнах, намного больше, чем то, что обеспечивает TK.

Некоторые из виджетов PYQT показаны ниже:

Если вы новичок в PYQT, я рекомендую Эта книга и курс Отказ

С точки зрения его недостатков, лицензия QT более ограничена, чем многие инструменты для инструментов (по крайней мере, для платформ без Linux); Qt – довольно большая библиотека.

PYQT строго следует лицензированию Qt. В частности, он доступен для GPL На платформе Unix/X11 и в коммерческих целях есть еще одна лицензия.

Qt использует механизм под названием сигналы/слоты пропустить события и сообщения между артефактами окна (и другими объектами). Этот механизм полностью отличается от механизма обратного вызова, используемого в большинстве инструментов, включая TKinter.

Чем больше приложение, тем важнее это преимущество PYQT становится.

GUI DEMO APP: счетчик журнала

Чтобы показать контрастность между сигналом/слотом и обратным вызовом, мы предоставляем приложение для записи и воспроизведения, которое использует TKinter и Pyqt.

Приложение состоит из четырех оконных компонентов.

  • Кнопка «quit» (чтобы выйти)
  • ” Кнопка журнала времени журнала (для сообщений)
  • Текстовая область, которая отображает прокручиваемый список меток времени для зарегистрированных журналов
  • Компонент окна сообщения, который отображает количество метков времени для заново

Пример Tkinter.

В TKinter мы можем реализовать такое приложение.

Logger Tkinter приложение

import sys, time
from tkinter import *

class Logger(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.pack(expand=YES, fill=BOTH)
        self.master.title("Timestamp logging app")
        self.tslist = []
        self.tsdisp = Text(height=6, width=25)
        self.count = StringVar()
        self.cntdisp = Message(font=('Sans',24),
                               textvariable=self.count)
        self.log = Button(text="Log Timestamp",
                          command=self.log_timestamp)
        self.quit = Button(text="Quit", command=sys.exit)
        self.tsdisp.pack(side=LEFT)
        self.cntdisp.pack()
        self.log.pack(side=TOP, expand=YES, fill=BOTH)
        self.quit.pack(side=BOTTOM, fill=BOTH)

    def log_timestamp(self):
        stamp = time.ctime()
        self.tsdisp.insert(END, stamp+"\n")
        self.tsdisp.see(END)
        self.tslist.append(stamp)
        self.count.set("% 3d" % len(self.tslist))

if __name__=='__main__':
    Logger().mainloop()

Эта версия TK использует метод log_timestamp () как для кнопки. В Кнопки Tkinter связаны с обратным вызовом.

        self.log = Button(text="Log Timestamp",
                          command=self.log_timestamp)

Это означает, что нажмите, он вызывает этот метод.

Пример PYQT

В Python Pyqt вы можете реализовать такое приложение:

import sys, time
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QTextEdit, QPushButton, QLabel, QHBoxLayout

class Logger(QWidget):
    def __init__(self, *args):
        QWidget.__init__(self, *args)
        self.layout = QGridLayout()
        self.layout.setColumnStretch(2,2)

        self.tsdisp = QTextEdit(self)
        self.tsdisp.setMinimumSize(250, 300)
        self.tscount = QLabel("", self)

        self.log = QPushButton("&Log Timestamp", self)
        self.quit = QPushButton("&Quit", self)

        self.layout.addWidget(self.tsdisp, 0, 0)
        self.layout.addWidget(self.tscount, 0, 1)
        self.layout.addWidget(self.log, 2, 0)
        self.layout.addWidget(self.quit, 2, 1)

        self.log.clicked.connect(self.log_timestamp)
        self.quit.clicked.connect(self.close)
        self.setLayout(self.layout)

    def log_timestamp(self):
        stamp = time.ctime()
        self.tsdisp.append(stamp)
        self.tscount.setText(str(self.tsdisp.toPlainText().count("\n")))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    logger = Logger()
    logger.show()
    sys.exit(app.exec_())

Создавая менеджер макета, класс регистратора должен работать. Менеджер макета – это сложная тема в любой системе GUI, но реализация Qt делает его простым.

В большинстве случаев вы будете использовать Qt Designer Чтобы создать общий дизайн GUI, который затем может использоваться для генерации кода Python или C ++. Затем вы можете сделать созданный код генерировать подклассы для добавления функциональности.

Но в этом примере мы решили создать менеджер макета вручную. Строительные блоки окна размещены в отдельных ячейках Макет сетки или можно разместить в нескольких клетках.

self.layout = QGridLayout()
self.layout.setColumnStretch(2,2)
self.layout.addWidget(self.tsdisp, 0, 0)
...

Самая интересная часть приложения – это то, где мы подключаем нажал сигнал к функции.

Одна кнопка подключается к методу log_timestamp; Другой соединяется с тесным методом класса QWidget.

self.log.clicked.connect(self.log_timestamp)
self.quit.clicked.connect(self.close)

Оригинал: “https://dev.to/threadspeed/gui-library-for-python-3g7c”