Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Python + PyQt и QtDesigner  (Прочитано 5196 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RQWERQWER

  • Автор темы
  • Активист
  • *
  • Сообщений: 252
    • Просмотр профиля
Python + PyQt и QtDesigner
« : 09 Декабря 2010, 16:07:42 »
Всем привет! Есть у меня скрипт Python -
import sys
from PyQt4 import QtGui, uic
app = QtGui.QApplication(sys.argv)
widget = uic.loadUi("my.ui")
widget.show()
app.exec_()
Что в этом коде добавить, чтобы при нажатии на кнопку Button выполнялось действие?

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #1 : 09 Декабря 2010, 17:24:24 »

Оффлайн RQWERQWER

  • Автор темы
  • Активист
  • *
  • Сообщений: 252
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #2 : 09 Декабря 2010, 17:51:02 »
Нет, такие документации я уже читал, ничего в них не нашёл. Есть только с помощью конвертирования .ui в код python утилитой pyuic. Но мне просто охота чтобы было сразу через .ui

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #3 : 09 Декабря 2010, 18:14:19 »
Не знаю как это сделано в питоновских биндингах к Qt, но в оригинали (C++) ui файлы используются для генерации кода, который будет далее использован в проекте. Когда ты явно хочешь использовать ui в рантайме, то ты загружаешь его и располагаешь элементы на виджете, а потом руками ищешь child элементы по имени и коннектиш их сигналы и слоты с сигналами и слотами в своём приложении (либо используешь QMetaObject::connectSlotsByName()).

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #4 : 10 Декабря 2010, 11:08:53 »
https://forum.ubuntu.ru/index.php?topic=112815.0
Сигналы и слоты надо делать в унаследованном классе. Тогда изменения, сделанные в дизайнере не требуют больший телодвижений.
Достаточно только сконвертировать ui в py скриптом (это 1 команда, но рекомендую сделать ее скриптом) и все дела.
« Последнее редактирование: 10 Декабря 2010, 11:14:55 от alexander.pronin »

thevoan

  • Гость
Re: Python + PyQt и QtDesigner
« Ответ #5 : 19 Декабря 2010, 15:35:17 »
в pyqt для доступа к объектам накаляканым в дизайнере не обязательно конвертировать .ui в .py описание.
доступ к объектам доступен после подгрузки .ui файла.
маленький примерчик:
main.py:
(Нажмите, чтобы показать/скрыть)

my.ui:
(Нажмите, чтобы показать/скрыть)

Оффлайн RQWERQWER

  • Автор темы
  • Активист
  • *
  • Сообщений: 252
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #6 : 19 Декабря 2010, 16:08:36 »
thevoan, спасибо! То что искал!

Оффлайн blindvic

  • Участник
  • *
  • Сообщений: 179
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #7 : 19 Декабря 2010, 16:55:57 »
вместо:
QtCore.QObject.connect(self.button_0, QtCore.SIGNAL("clicked()"), self.signal_0)так проще:
self.button_0.clicked.connect(self.signal_0)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #8 : 20 Декабря 2010, 08:48:47 »
thevoan, спасибо за информацию.
Так дорога короче. 8)

Пользователь решил продолжить мысль 20 Декабря 2010, 09:30:59:
вместо:
QtCore.QObject.connect(self.button_0, QtCore.SIGNAL("clicked()"), self.signal_0)так проще:
self.button_0.clicked.connect(self.signal_0)
У меня этот вариант не заработал.
« Последнее редактирование: 20 Декабря 2010, 09:30:59 от alexander.pronin »

thevoan

  • Гость
Re: Python + PyQt и QtDesigner
« Ответ #9 : 20 Декабря 2010, 09:59:06 »
blindvic, чем проще-то? меньше букв, что-ли?:)
alexander.pronin, это новый стиль сигналов и слотов, работает с pyqt4.5. Старый работать будет до конца 4-й ветки pyqt., так что, имхо, с новым стилем можно пока и не заморачиваться.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #10 : 20 Декабря 2010, 10:30:37 »
Понятно, спасибо.

Оффлайн blindvic

  • Участник
  • *
  • Сообщений: 179
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #11 : 20 Декабря 2010, 13:04:30 »
blindvic, чем проще-то? меньше букв, что-ли?:)
ну да, и намного
кроме того, это the pythonic way.

Цитировать
This section describes the older style for connecting signals and slots. It uses the same API that a C++ application would use. This has a number of advantages.

    It is well understood and documented.
    Any future changes to the C++ API should be easily included.

It also has a number of disadvantages.

    It requires knowledge of the C++ types of signal arguments.
    It is error prone in that if you mis-type the signal name or signature then no exception is raised, either when the signal is connected or emitted.
    It is verbose.
    It is not Pythonic.

This older style of connecting signals and slots will continue to be supported throughout the life of PyQt v4.
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#id65


Цитировать
An interesting variation you can use when defining Python slots on the fly
is to use the signal as a decorator:

@button.clicked.connect
def clicked():
    print "Button clicked"

« Последнее редактирование: 20 Декабря 2010, 13:16:18 от blindvic »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #12 : 20 Декабря 2010, 13:29:41 »
Цитировать
@button.clicked.connect
def clicked():
    print "Button clicked"

Тут уже вылизано все.
Но работает только с версии 4.7, так ?

Оффлайн blindvic

  • Участник
  • *
  • Сообщений: 179
    • Просмотр профиля
Re: Python + PyQt и QtDesigner
« Ответ #13 : 20 Декабря 2010, 22:30:41 »
Но работает только с версии 4.7, так ?
Цитировать
...new style of connecting signals and slots introduced in PyQt v4.5.

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.