LINUX.ORG.RU

PyQt и подргузка дизайнерских .ui-файлов


0

1

Как правильно подгружать во время исполнения программы ui-файлы при помощи модуля uic? Как описано здесь во втором и третьем листинге, но без использования заранее сгенерированного из ui-файла кода на питоне? Пробовал по-разному играться с uic.loadUi() и uic.loadUiType(), но максимум что получилось — аналогия того, что написано там в первом листинге. Можно пример, как это делается? А то ни сделать, нагуглить так и не удалось.

Код одной из неудачных попыток:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui, uic
app = QtGui.QApplication(sys.argv)

class MainWindow(QtGui.QMainWindow):
	def __init__(self):
		QtGui.QMainWindow.__init__(self)
		self.ui = uic.loadUi('mainwindow.ui')
		self.ui.setupUi(self)

mw = MainWindow()
mw.show()
app.exec_()

Выдаёт следующее:

  File "./program.py", line 11, in __init__
    self.ui.setupUi(self)
AttributeError: 'QMainWindow' object has no attribute 'setupUi'

Использую Python 2.6 и PyQt 4.7.4

☆☆☆☆☆

Последнее исправление: Ttt (всего исправлений: 1)

Посмотрел, скорее всего работать будет так:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui, uic
app = QtGui.QApplication(sys.argv)

class MainWindow(QtGui.QMainWindow):
   def __init__(self):
      QtGui.QMainWindow.__init__(self)
      uic.loadUi('mainwindow.ui', self)
      self.myButtonInUi.clicked.connect(self.obBtnClick)

      

mw = MainWindow()
mw.show()
app.exec_()
А вообще, не будет ли это более накладным, чем генерить пайфайл?

zJes ★★
()
Ответ на: комментарий от zJes

А вообще, не будет ли это более накладным, чем генерить пайфайл?

GtkBuilder довольно таки шустр, не думаю, что в Qt сделано кривее. А разработка без кодогенерации немного упрощается.

baverman ★★★
()
Ответ на: комментарий от baverman

Проверил же.... Загрузка достаточно тяжелой формы.
Через уик:

time python main1.py 
real    0m0.163s
user    0m0.143s
sys     0m0.013s
Через сгенерированный файл (ну и к тому же тут еще и ресурсы подрубились):
time python main2.py 
real    0m0.120s
user    0m0.100s
sys     0m0.017s
Так что, классический вариант быстрее, больше возможностей, включая ресурсы, локализацию.

zJes ★★
()
Ответ на: комментарий от slipbodd

Тише, не буди лихо пока оно тихо... :)

В 1 варианте просто надо не забыть, за а) ресурсы(иконки, изображения, если такие имеются), за б) локализация (я просто насчет их не уверен, что начитаются автоматом). При генерации все это имеем из коробки. Просто удобнее кодогенератором.

zJes ★★
()
Ответ на: комментарий от baverman

>А разработка без кодогенерации немного упрощается

Да ладно, там вроде всего-то пару команд в консоли набрать.

anonymous
()
Ответ на: комментарий от anonymous

там вроде всего-то пару команд в консоли набрать.

Я же не сказал: «Это святой грааль, который спасет человечество».

Кстати очень удобно твикать ui не перезапуская приложение, подправил glade-файл, открыл форму, а она уже свежая — PROFIT!

baverman ★★★
()
Ответ на: комментарий от zJes

Если уж используешь Python, то делай все в динамике и не думай о накладных расходах.

PayableOnDeath
()
Ответ на: комментарий от zJes

Спасибо. Вроде работает. Кстати, я в документации примеры таки нашёл. Почему раньше не заметил их — не знаю =)

Ttt ☆☆☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.