Попытка выучить PyQt со знанием дела из Tkinter - PullRequest
6 голосов
/ 05 сентября 2011

Может быть, я прыгаю в глубокий конец, но я попробую.

Вот некоторые полезные функции Tkinter:

  • TkinterCanvas виджет - объектно-ориентированный холст для рисования.Элементы чертежа по сути являются самими виджетами, так как они могут быть перемещены, изменены и привязаны к событиям .

  • Tkinter использует привязки для запуска обратных вызовов.Событие передается в виде строки .Пользовательские события могут быть легко созданы с помощью event_generate.

  • Tkinter имеет метод after, который ожидает указанное количество времени без зависания графического интерфейса.

  • Tkinter имеет предопределенные шрифты, такие как TkDefaultFont, и цвета, такие как systemButtonFace, которые зависят от system .

Мои вопросы:

Каковы эквиваленты этих функций в pyQt (особенно жирный)?

Как я могу "привязать" элементы виджета (например, только метку кнопки-флажка) к событию

1 Ответ

1 голос
/ 06 сентября 2011

В Qt и PyQt события называются сигналами, и вы привязываетесь к ним, используя слоты ( документы здесь ).Вообще говоря, то, что вы делаете, определяет слот с @ декоратором.

class WindowImpl (QtGui.QMainWindow, Ui_TremorMain, Ui_Graphs):
  def __init__ (self, buffer, parent = None, configuration = None):
    # do some initialisation here (not GUI setup however)

  @QtCore.pyqtSlot(int, name="on_confSelectorCombo_currentIndexChanged")
  def confChanged (self, newConf):
    # do some stuff here to handle the event

Вышеуказанное будет срабатывать при событии currentIndexChanged объекта с именем confSelectorCombo.Настройка confSelectorCombo выполняется в GUI Builder или Qt Creator, как Nokia решила это назвать.Это действительно то, что вы хотите использовать, чтобы начать.Здесь есть уроки здесь по использованию Qt Creator.Очевидно, вы захотите просмотреть документы и посмотреть, какие сигналы излучаются какими виджетами.

Что касается шрифтов, все, что я знаю, это то, что они говорят о документах :

If you have not set a font for your application then the default font on your
machine will be used, and the default font can be different on different
machines. On Windows the default Windows font is used, on X11 the one in qtrc
can be used. If a default font can’t be found, then a font specified by Qt
will be used.

QStyleSheet и QStyle действуют как прокси для изменения внешнего вида виджетов ( QStylesheet , QStyle ).

Что касаетсязаставив приложение подождать, я нашел this

QTime dieTime = QTime::currentTime().addSecs(2);
while( QTime::currentTime() < dieTime ):
  QCoreApplication::processEvents(QEventLoop::AllEvents, 100);

Существует также QThread.sleep() ( docs ), в зависимости от того, какой эффект вы хотите.Вероятно, также стоит взглянуть на поддержку потоков в Qt docs

В целом, при поиске информации о том, как что-то делать в PyQt, я нашел удивительно полезным взглянуть на документацию Qt, а затем простописать вещи на Python.9 раз из 10 это работает.С другой стороны, вероятно, стоит также взглянуть на PySide, которая является другой библиотекой Python Qt.Я не использовал себя раньше, как это было в работах ранее, но я заметил, что они выпустили версию 1.0.6.

ОБНОВЛЕНИЕ Просто чтобы повторить Люка Вудворда ниже,вы можете использовать QGraphicsScene и QGraphicsView для рендеринга объектов объектно-ориентированным способом.QGraphicsScene на самом деле ничего не отображает, это просто граф сцены, тогда QGraphicsView используется для визуализации содержимого графа сцены.Для рисования низкого уровня также есть QPainter - здесь есть базовый учебник рисования здесь .Также стоит посмотреть QGraphicsItem, который является основой для всех графических элементов, и

includes defining the item's geometry, collision detection, its painting     
implementation and item interaction through its event handlers

документы здесь .Context2D предоставляет HTML-холст (если я не ошибаюсь при использовании WebKit).Сам холст имеет только измененный слот, но любые объекты, которые вы помещаете на холст, будут / могут иметь больше слотов.Здесь довольно полное руководство по Context2D и Context2DCanvas здесь .Для объяснения того, почему так много разных способов рендеринга, вы должны спросить кого-то еще.Мои два цента в том, что это как-то связано с тем фактом, что Qt должен работать везде, и Trolltech, а затем Nokia хотели предоставить большой выбор.К счастью, документы действительно хороши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...