Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как связать самодельный код с полученным кодом после QTDesigner? [RSS Feed]

#1 Июнь 8, 2011 21:20:40

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Как связать самодельный код с полученным кодом после QTDesigner?

в Qt Designer есть такая полезная опция “изменение сигналов/слотов”.



Офлайн

#2 Авг. 26, 2011 20:49:06

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Здравствуйте, столкнулся с проблемой указанной в заголовке, тему прочитал, но не очень понял. Например, у меня имеется простая форма с кнопкой и лейблом, нарисованная в дизайнере, переведенная на питон. Дополните пожалуйста код таким образом, чтобы по нажатию на кнопку, в лейбл добавлялось, например ‘Hello World’. А дальше попытаюсь сам сориентироваться. Заранее спасибо.

from PyQt4 import QtCore, QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(400, 300)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(20, 110, 97, 27))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.label = QtGui.QLabel(Form)
self.label.setGeometry(QtCore.QRect(30, 60, 67, 17))
self.label.setObjectName(_fromUtf8("label"))

self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)

def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Form", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))


if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())



Отредактировано (Авг. 26, 2011 20:51:02)

Офлайн

#3 Авг. 27, 2011 13:21:28

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Вот:

from PyQt4 import QtCore, QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(400, 300)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(20, 110, 97, 27))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.label = QtGui.QLabel(Form)
self.label.setGeometry(QtCore.QRect(30, 60, 67, 17))
self.label.setObjectName(_fromUtf8("label"))

self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)

self.pushButton.clicked.connect(self.slotPushButtonPress)

def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Form", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))

def slotPushButtonPress(self):
self.label.setText('my text')


if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Только как писали выше, код который получается из дизайнера лучше отделять от вашего. Подробнее тут - http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/designer.html



Отредактировано (Авг. 27, 2011 13:24:40)

Офлайн

#4 Авг. 27, 2011 19:51:46

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2759
Репутация: +  184  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Вот недавно такая книга появилась. Скоро обещают бумажную версию.
http://yaslil.com/201107136793/pyqt-sozdanie-okonnih-prilojenii-na-python-3-prohorenok-n-a-skachat-knigu-besplatno.html



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Авг. 28, 2011 12:44:45

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

mks
Большое спасибо!

Rodegast
И вам спасибо! Кажется это именно то, что мне нужно.

А вообще, стоит пользоваться дизайнером, или лучше писать гуи руками?



Офлайн

#6 Авг. 28, 2011 13:46:44

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2759
Репутация: +  184  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

> стоит пользоваться дизайнером, или лучше писать гуи руками?

Руками вы много не напишите.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Авг. 28, 2011 14:19:54

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Rodegast
А не подскажите, существует какая-нибудь IDE с автодополнением кода QT, которая будет подсказывать свойства объектов, чтобы я, например, написал slider. а он выкинул список с его свойствами setRange, setValue и т.д?



Офлайн

#8 Авг. 28, 2011 14:44:18

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

я пользуюсь eric ide, в ней удобно работать с pyqt. Можно ли туда прикрутить автодополнение не знаю. Посмотрите учебники у них на сайте http://eric-ide.python-projects.org/eric-tutorials.html



Офлайн

#9 Авг. 28, 2011 16:01:13

Garry87
От:
Зарегистрирован: 2011-08-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

mks
Хорошо, присмотрюсь к нему.

Не могли бы вы еще подсказать по предыдущему моему коду: я добавил textEdit и теперь пытаюсь по нажатию кнопки вывести из него текст в label, но что-то не получается. Делаю вот так:

from PyQt4 import QtCore, QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(400, 300)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(230, 30, 97, 27))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.textEdit = QtGui.QTextEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(50, 30, 131, 31))
self.textEdit.setObjectName(_fromUtf8("textEdit"))
self.label = QtGui.QLabel(Form)
self.label.setGeometry(QtCore.QRect(60, 80, 67, 17))
self.label.setObjectName(_fromUtf8("label"))

self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)

self.pushButton.clicked.connect(self.slotPushButtonPress)

def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Form", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))

def slotPushButtonPress(self):
self.connect(textEdit, Qt.SIGNAL("textChanged()"), label.setText)



if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())



Офлайн

#10 Авг. 28, 2011 17:04:58

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Как связать самодельный код с полученным кодом после QTDesigner?

Например так:

from PyQt4 import QtCore, QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s

class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(400, 300)
self.pushButton = QtGui.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(230, 30, 97, 27))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.textEdit = QtGui.QTextEdit(Form)
self.textEdit.setGeometry(QtCore.QRect(50, 30, 131, 31))
self.textEdit.setObjectName(_fromUtf8("textEdit"))
self.label = QtGui.QLabel(Form)
self.label.setGeometry(QtCore.QRect(60, 80, 67, 17))
self.label.setObjectName(_fromUtf8("label"))

self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)

self.pushButton.clicked.connect(self.slotPushButtonPress)


def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate("Form", "Form", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("Form", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Form", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))

def slotPushButtonPress(self):
#self.connect(textEdit, Qt.SIGNAL("textChanged()"), label.setText)
self.label.setText(self.textEdit.toPlainText())



if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
У вас там в функции slotPushButtonPress отступов нет. Но всё равно это не очень правильно. Не надо каждый раз присоединять сигнал к слоту, достаточно это сделать 1 раз например в методе __init__. И текс у вас менятся не будет так как сигнал textChanged() редактора не посылает сам текст, а только уведомляет о том что он изменился, для того чтобы работало по вашей логике вам надо к слоту setText(QString) присоединять сигнал с таким же аргументом QString.



Офлайн

  • Начало
  • » GUI
  • » Как связать самодельный код с полученным кодом после QTDesigner?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version