Форум сайта python.su
Вот, пишу библиотечку, чтобы не заморачиваться постоянно с QT
file: lego.py
class gui_file(): # add also GUI_FORM def __init__(self, filename, **args): self.debug = 1 if self.debug == 1: print ('Received:', args) for f in args['buttons']: print ('=> %s' % f.__name__) # first we get all inputs, buttons from lxml import etree from StringIO import StringIO # Read all .ui file and get its widgets f = open(filename) xml = f.read() f.close() self.funcdict = {} # Parse all buttons from this file tree = etree.parse(StringIO(xml)) context = etree.iterparse(StringIO(xml)) for action, elem in context: if elem.tag == 'widget': if self.debug == 1: print ("%s -- (%s)" % (elem.attrib['name'], elem.attrib['class'])) for f in args['buttons']: if f.__name__ == elem.attrib['name']: if self.debug == 1: print 'func for %s found' % f.__name__ name = elem.attrib['name'] self.funcdict [name] = f.__name__ #print self.funcdict # Now load this UI from PyQt4 import QtGui, QtCore, uic from sys import argv as myarg self.app = QtGui.QApplication(myarg) self.window = uic.loadUi(filename) # Whistles, anyone? try: if args['style']: #print args['style'] self.app.setStyle(QtGui.QStyleFactory.create(args['style'])) except: pass # Now assign them to each other for func in self.funcdict: for button in args['buttons']: # <-- Да, это криво! if button.__name__ == func: QtCore.QObject.connect(getattr(self.window, func), QtCore.SIGNAL("clicked()"), button) if self.debug == 1: print ('assigned', getattr(self.window, func), 'to', button) def show(self): self.window.show()
# -*- coding: utf-8 -*- from lego import gui_file from sys import exit def okbutton(): print ('OK pressed!') def nobutton(): print ('NO pressed!') def gobutton(): print ('GO button pressed!') if __name__ == "__main__": gui = gui_file('main.ui', buttons=[okbutton, nobutton, gobutton]) gui.show() exit(gui.app.exec_())
for button in args['buttons']: # <-- Да, это криво!
if button.__name__ == args['buttons'][name]
Отредактировано pmus (Дек. 19, 2013 20:36:05)
Офлайн
У меня пока только один вопрос “Зачем всё это нужно”?
Отредактировано Rodegast (Дек. 19, 2013 21:16:52)
Офлайн
Rodegast
У меня пока только один вопрос “Зачем всё это нужно”?
Отредактировано pmus (Дек. 20, 2013 07:57:37)
Офлайн
pmus
почитай что-нибудь по наследованию в классах
Офлайн
ТС прочитайте про pyuic, зачем велосипед свой.
Ну и есть же uic модуль в PyQt который позволяет грузить ui файлы.
Офлайн
mironich
Ну и есть же uic модуль в PyQt который позволяет грузить ui файлы.
# Now load this UI from PyQt4 import QtGui, QtCore, uic
QtCore.QObject.connect(getattr(self.window, func), QtCore.SIGNAL("clicked()"), button)
jobs = self.window.text_jobs.toPlainText() login = self.window.text_login.text()
gui = gui_file('main.ui', buttons=[okbutton, nobutton, gobutton], inputs=[text_jobs, text_login]) #... jobs = gui.text_jobs login = gui.text_login
Отредактировано pmus (Дек. 20, 2013 17:21:25)
Офлайн
pmusЭто надо знать, запомнить не так уж и сложно..
И не вспоминать, где там .toPlainText, а где .text, например:
Офлайн
mironich
Это надо знать, запомнить не так уж и сложно..
Отредактировано pmus (Дек. 21, 2013 11:23:59)
Офлайн