Найти - Пользователи
Полная версия: Как связать самодельный код с полученным кодом после QTDesigner?
Начало » GUI » Как связать самодельный код с полученным кодом после QTDesigner?
1 2 3 4
truporez
в Qt Designer есть такая полезная опция “изменение сигналов/слотов”.
Garry87
Здравствуйте, столкнулся с проблемой указанной в заголовке, тему прочитал, но не очень понял. Например, у меня имеется простая форма с кнопкой и лейблом, нарисованная в дизайнере, переведенная на питон. Дополните пожалуйста код таким образом, чтобы по нажатию на кнопку, в лейбл добавлялось, например ‘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_())
mks
Вот:
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
Rodegast
Вот недавно такая книга появилась. Скоро обещают бумажную версию.
http://yaslil.com/201107136793/pyqt-sozdanie-okonnih-prilojenii-na-python-3-prohorenok-n-a-skachat-knigu-besplatno.html
Garry87
mks
Большое спасибо!

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

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

Руками вы много не напишите.
Garry87
Rodegast
А не подскажите, существует какая-нибудь IDE с автодополнением кода QT, которая будет подсказывать свойства объектов, чтобы я, например, написал slider. а он выкинул список с его свойствами setRange, setValue и т.д?
mks
я пользуюсь eric ide, в ней удобно работать с pyqt. Можно ли туда прикрутить автодополнение не знаю. Посмотрите учебники у них на сайте http://eric-ide.python-projects.org/eric-tutorials.html
Garry87
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_())
mks
Например так:
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.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB