Найти - Пользователи
Полная версия: простейшая задачka PyQt
Начало » GUI » простейшая задачka PyQt
1
love-song
Добрый день требуется чтобы при введении числа в строку “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_())
Barsah
Во первых, для того, чтобы обращаться к элементам из функции, нужно их объявлять через self.
# Set up the widgets.
self.p1Edit = QtGui.QSpinBox()
self.res = QtGui.QLineEdit()
self.res2 = QtGui.QLineEdit()
Соответственно добавлять в layer тоже нужно self.<Имя>
layout.addWidget(self.p1Edit, 0, 1, 1, 4)
layout.addWidget(self.res, 2, 1, 1, 4)
layout.addWidget(self.res2, 3, 1, 1, 4)
Дальше, нужно после объявления кнопки нацепить на нее функцию такой конструкцией <имя кнопки>.clicked.connect(<имя функции>)
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))
И все! Остальной код я не трогал. Кстати, если планируется вводить и перемножать не целые числа, а числа с точкой, то вместо i = int(self.p1Edit.text()) нужно написать i = float(self.p1Edit.text())
love-song
спасибо огромное за доступное объяснение!!!
verstal4ik
А если я вот таким образом подключаю кнопку:
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_())
Как создать событие на изменение значения QSpinBox.

Если self.spinbox1.valueChanged.connect (self.spinbox1_valueChange) в def __init__(self) python ругается.
reclosedev
Что в сообщении об ошибке?
code принципиально не используете?
[code]
ЗДЕСЬ КОД!
[/code]
verstal4ik
в def __init__(self): добавил self.connect(self.spinbox1, QtCore.SIGNAL(“valueChanged(int)”), self.spin_changed)
Таким образом заработало
verstal4ik
В чем разница записи и почему так?
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_())

Если же я запишу так:

  • self.connect(self.spinbox, QtCore.SIGNAL(“valueChanged”), self.spinbox_changed), то форма запуститься, но работать не будет;

  • использую такую запись self.spiner.valueChanged.connect(self.spiner_changed), то все нормально;

  • а если self.spiner.valueChanged(int).connect(self.spiner_changed), то
    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
    
reclosedev
Перечитайте документацию внимательнее
Connecting, Disconnecting and Emitting Signals
Скобки квадратные
self.spinbox.valueChanged[int].connect(self.spinbox_changed)

int по умолчанию, можно не указывать.
self.spinbox.valueChanged.connect(self.spinbox_changed)
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