Форум сайта python.su
mks
Спасибо. :) С вашим вариантом разобрался, а вот свой сделать рабочим так и не получилось. Пойду читать книгу, ссылку на которую дал Rodegast, видать прочтения нескольких статей в совокупности с моим умом недостаточно для понимания Qt. '(
Офлайн
Garry87Eclipse + PyDev
А не подскажите, существует какая-нибудь IDE с автодополнением кода QT
Офлайн
Подскажите, как сделать так, чтобы выставив время в timeEdit и щелкая по pushButton это значение передавалось в label? И вообще, как пользоваться http://doc.qt.nokia.com/4.7/qtgui.html ? Как узнать что сигнал одного компонента можно связать со слотом другого? Там ни одного примера нет вида connect(<Объект1>, <Сигнал>, <Объект2>, <Слот>), ну или аналогичного.
Офлайн
Garry87http://doc.qt.nokia.com/4.7/signalsandslots.html
…Как узнать что сигнал одного компонента можно связать со слотом другого?…
Офлайн
mks
Спасибо, но в общих чертах я этот механизм понял. Но как дело доходит до конкретики- у меня все стопорится. Например чтобы выставив время в timeEdit и щелкая по pushButton это значение передавалось в label делаю так:
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(422, 300)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.timeEdit = QtGui.QTimeEdit(self.centralwidget)
self.timeEdit.setGeometry(QtCore.QRect(40, 40, 118, 27))
self.timeEdit.setObjectName(_fromUtf8("timeEdit"))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(180, 40, 67, 17))
self.label.setObjectName(_fromUtf8("label"))
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(130, 100, 97, 27))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 422, 25))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.pushButton.clicked.connect(self.slotPushButtonPress)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
def slotPushButtonPress(self):
self.label.setText(self.timeEdit.timeChanged())
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Офлайн
Вы похоже стремитесь вставлять сигнал-слотовые соединения где надо и не надо, у классов Qt кроме сигналов и слотов есть простые открытые методы, вызывая которые можно получать либо изменять внутреннее состояние объекта (например у QDateTimeEdit их намного больше чем сигналов и слотов). Если вы хотите по нажатию кнопки что то делать то в слоте нажатия кнопки с помощью открытых функций получайте текущую дату, потом вставляйте её label. Вы пытаетесь с помощью сигнала получить значение, для этого его надо соединить со слотом а не просто вызывать как у вас.
Посмотрите разницу:
void dateChanged (const QDate & date)
QDate date () const
Офлайн
mks
Во-первых большое человеческое спасибо, за то что пытаетесь донести до бестолкового меня свет истины. :)
Во-вторых методы == Public Functions?
В-третьих как правильно понимать запись вида
void dateChanged (const QDate & date)
Офлайн
Garry87В первом приближении да. Дело в том что библиотека Qt написана на С++, pyqt это просто обёртки для python над С++ функциями и классами.
Во-вторых методы == Public Functions?
void dateChanged (const QDate & date)
Garry87Да, сначала тип возвращаемого значения, а в скобках типы и количество принимаемых аргументов, в данном случае передача константной ссылкой. Если это не знакомо, изучите азы языка С++.
Видимо, сначала идет тип возвращаемого значения, потом название метода, а что указывается в скобках? И не могли бы Вы коротенько объяснить какой синтаксис используется при вызове методов?
Офлайн
mks
Эхх… А напрямую значит с помощью механизма сигналов и слотов не все можно соеденить? Например я без особых проблем смог соеденить slider и spinbox, но соеденить timeEdit и lineedit таким способом видимо нельзя..?
from PyQt4 import Qt
import sys
if __name__ == "__main__" :
app = Qt.QApplication(sys.argv)
window = Qt.QWidget()
window.setWindowTitle("Enter a number")
layout = Qt.QHBoxLayout()
window.setLayout(layout)
slider = Qt.QSlider(Qt.Qt.Horizontal)
slider.setRange(0, 100)
layout.addWidget(slider)
spinbox = Qt.QSpinBox()
spinbox.setRange(0, 100)
layout.addWidget(spinbox)
timeEdit = Qt.QTimeEdit()
layout.addWidget(timeEdit)
label = Qt.QLabel()
layout.addWidget(label)
lineedit = Qt.QLineEdit()
layout.addWidget(lineedit)
Qt.QObject.connect(slider, Qt.SIGNAL("valueChanged(int)"), spinbox.setValue)
Qt.QObject.connect(spinbox, Qt.SIGNAL("valueChanged(int)"), slider.setValue)
Qt.QObject.connect(timeEdit, Qt.SIGNAL("timeChanged(int)"), label.setText)
slider.setValue(25)
window.show()
app.exec_()
Офлайн
Да можно, главное чтобы сигнал и слот совпадали по параметрам. Если требуемого сигнала или слота нет, то можно наследоваться и создавать нужный сигнал/слот в потомке.
Офлайн