Форум сайта python.su
Добрый день требуется чтобы при введении числа в строку “p1” программа в строке “результат” возвращала квадрат введенного числа, а в строку “результат” 2 возвращало куб введенного числа. Пожалуйста объясните доходчиво новичку как к кнопке привязать действия функций и если я задал их не правильно(в чем я не сомневаюсь) как их задать?
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
# Set up the widgets.
p1 = QtGui.QLabel("p1:")
p1Edit = QtGui.QSpinBox()
re = QtGui.QLabel("resultat:")
res = QtGui.QLineEdit()
re2 = QtGui.QLabel("resultat2:")
res2 = QtGui.QLineEdit()
knopka = QtGui.QPushButton("push ME")
layout = QtGui.QGridLayout()
layout.addWidget(p1, 0, 0, 1, 1)
layout.addWidget(p1Edit, 0, 1, 1, 4)
layout.addWidget(re, 2, 0, 1, 1)
layout.addWidget(res, 2, 1, 1, 4)
layout.addWidget(re2, 3, 0, 1, 1)
layout.addWidget(res2, 3, 1, 1, 4)
layout.addWidget(knopka, 4, 0, 1, 1)
self.setLayout(layout)
self.setWindowTitle("hz")
def operation(self):
perem = float(p1.text())
result = perem**2
self.res.setText(str(result))
def operation2(self):
perem = float(p1.text())
result = perem**3
self.res2.setText(str(result))
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
Отредактировано (Март 3, 2012 13:49:19)
Офлайн
Во первых, для того, чтобы обращаться к элементам из функции, нужно их объявлять через self.
# Set up the widgets.
self.p1Edit = QtGui.QSpinBox()
self.res = QtGui.QLineEdit()
self.res2 = QtGui.QLineEdit()
layout.addWidget(self.p1Edit, 0, 1, 1, 4)
layout.addWidget(self.res, 2, 1, 1, 4)
layout.addWidget(self.res2, 3, 1, 1, 4)
knopka.clicked.connect(self.operation)
def operation(self):
i = int(self.p1Edit.text())
self.res.setText(str(i**2))
self.res2.setText(str(i**3))
Отредактировано (Март 3, 2012 15:04:05)
Офлайн
спасибо огромное за доступное объяснение!!!
Офлайн
А если я вот таким образом подключаю кнопку:
import sys
from PyQt4 import QtCore, QtGui, uic
class MainWindow(QtGui.QTabWidget):
def __init__(self):
QtGui.QTabWidget.__init__(self)
uic.loadUi('pro.ui', self)
self.pushButton.clicked.connect(self.pushButton_Click)
def pushButton_Click (self):
self.LopTable.insertRow(self.LopTable.rowCount())
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Отредактировано verstal4ik (Июль 28, 2012 09:21:17)
Офлайн
Что в сообщении об ошибке?
code принципиально не используете?
[code]
ЗДЕСЬ КОД!
[/code]
Офлайн
в def __init__(self): добавил self.connect(self.spinbox1, QtCore.SIGNAL(“valueChanged(int)”), self.spin_changed)
Таким образом заработало
Офлайн
В чем разница записи и почему так?
import sys
from PyQt4 import QtCore, QtGui, uic
class MainWindow(QtGui.QTabWidget):
def __init__(self):
QtGui.QTabWidget.__init__(self)
uic.loadUi('form.ui', self)
[b]self.connect(self.spinbox, QtCore.SIGNAL("valueChanged(int)"), self.spinbox_changed)[/b]
def spinbox_changed(self):
self.tableWidget.setRowCount(self.spiner.value())
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Running: E:\development\project\project.py (Sat Jul 28 10:33:49 2012) Traceback (most recent call last): File "E:\development\project\project.py", line 199, in <module> w = MainWindow() File "E:\development\project\project.py", line 53, in __init__ self.spinbox.valueChanged(int).connect(self.spinbox_changed) TypeError: native Qt signal is not callable
Офлайн
Перечитайте документацию внимательнее
Connecting, Disconnecting and Emitting Signals
Скобки квадратные
self.spinbox.valueChanged[int].connect(self.spinbox_changed)
self.spinbox.valueChanged.connect(self.spinbox_changed)
Офлайн