Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/75: Рейтинг темы: голосов - 75, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 18
1

Как при нажатии на кнопку вывести результат функции в окно?

12.07.2013, 21:28. Показов 13540. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Использую python 2.7.5, PyQt 4.8.4. (я правда совсем новичок еще).
Сейчас я могу создать окно с кнопкой, нажимая которую, выполняется какая-либо функция. (Например: инкремент числа). Но результат функции выводится на консоль. А как сделать так, чтоб он еще выводился в окно и отображался рядом с кнопкой?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2013, 21:28
Ответы с готовыми решениями:

Как при нажатии на кнопку вывести текст в окно в PyQt4?
Привет всем! Имеется проект на питоне(Код самого приложения, gui и скрипт их объединяющий) Как...

Как вывести содержимое второго класса в окно при нажатии на кнопку в первом классе (kivy)?
Как вывести содержимое второго класса в окно при нажатии на кнопку в первом классе? Вот код: ...

При нажатии на кнопку вывести окно
Здравствуйте, подскажите функцию что бы при нажатии на кнопку выводилось новое окно, в котором...

При нажатии на кнопку вывести окно с текстом
Здравствуйте, у меня есть один вопрос. На моей форме происходит вычисление, и результат...

Как сделать чтобы при нажатии на кнопку открылся окно для выбора папки и по нажатии на ок сохранился файл в папку
C# как сделать чтобы при нажатии на кнопку открылся окно для выбора папки и по нажатии на кнопку ок...

7
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
14.07.2013, 22:32 2
Код в студию)
0
26 / 26 / 6
Регистрация: 19.10.2012
Сообщений: 131
14.07.2013, 23:00 3
Цитата Сообщение от vshnukrshna1 Посмотреть сообщение
А как сделать так, чтоб он еще выводился в окно и отображался рядом с кнопкой?
Для отображения в окне результата тебе нужно приляпать к нему вьюшку (метку, кнопку, текстовую область и тд)
и сваять метод, который будет слотом для сигнала с кнопки, меняющий текст вьюшки.
Что-то вроде:
Python
1
2
3
4
5
6
7
8
myButton = QtGui.QPushButton(text = "click me", parent = myWidget)
myText = QtGui.QLabel(text = "", parent = myWidget)
myText.setGeometry(QtCore,QRect(x , y, width, height))
 
def changeText(self, event):
    myText.setText(str(myFunction)) #если myFunction что-то возвращает
 
QtCore.QObject.connect(myButton, QtCore.SIGNAL("clicked()"), self.changeTexts)
Но некоторую часть кода будет интересно глянуть, что бы поточнее подсказать)
1
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 18
22.07.2013, 17:56  [ТС] 4
Спасибо, но как-то пока не хочет работать...=(
Кликните здесь для просмотра всего текста
Кстати, почему-то неправильно копируется код программы в форму ответа.. Между строками появляются дополнительные пробелы, поэтому пришлось вручную все редактировать..

Итак, кусок кода:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
z=0
def myfunc1():
        global z
        z=z+1
        print (z)
 
 
def changeText(self, event):
        lineEdit.setText(str(z))
 
 
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(613, 545)
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(244, 352, 111, 51))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(242, 290, 111, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), myfunc1)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), changeText)
 
 
    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.pushButton.setText(_translate("Form", "click me", None))
        self.lineEdit.setText(_translate("Form", "functionvalue", None))
 
 
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_())
Программа запускается, но при нажатии кнопки выдает ошибку:
Python
1
TypeError: ChangeText() takes exactly 2 arguments (0 given)
0
26 / 26 / 6
Регистрация: 19.10.2012
Сообщений: 131
22.07.2013, 19:55 5
Цитата Сообщение от vshnukrshna1 Посмотреть сообщение
Программа запускается, но при нажатии кнопки выдает ошибку:
Python
1
TypeError: ChangeText() takes exactly 2 arguments (0 given)
внесите функцию changeText(self, event) в тело класса после метода __init__

да и глобальные переменные - зло.
1
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 18
22.07.2013, 20:33  [ТС] 6
Не понял...(только сильно не пинайте).

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
z=0
def myfunc1():
        global z
        z=z+1
        print (z)
 
 
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(613, 545)
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(244, 352, 111, 51))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(242, 290, 111, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
 
    def changeText(self, event):
        lineEdit.setText(str(z))
 
        
        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), myfunc1)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), changeText)
 
 
    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.pushButton.setText(_translate("Form", "click me", None))
        self.lineEdit.setText(_translate("Form", "functionvalue", None))
 
 
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_())
Так?
Теперь просто пропали все надписи...Но программа не вылетает=)
0
26 / 26 / 6
Регистрация: 19.10.2012
Сообщений: 131
23.07.2013, 10:00 7
Цитата Сообщение от vshnukrshna1 Посмотреть сообщение
Теперь просто пропали все надписи...Но программа не вылетает=)
ну вы соединяете последовательно одну кнопку с двумя разными slota'ами, а реагировать на событие будет лишь последний.
в общем, раз гуи, то вроде такого:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from PyQt4 import QtGui
 
class Ui_Form(QtGui.QWidget):
    def __init__(self, parent = None):
        super(Ui_Form, self).__init__(parent)
        self.setupUi(self)
        self.z = 0
 
    def setupUi(self, Form):
 
        Form.setObjectName("Form")
        Form.resize(613, 545)
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(244, 352, 111, 51))
        self.pushButton.setObjectName("pushButton")
        
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(242, 290, 111, 20))
        self.lineEdit.setObjectName("lineEdit")
 
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.changeText)
 
        Form.show()
 
    def changeText(self):
        self.z+=1
        print (self.z)
        self.lineEdit.setText(str(self.z))
 
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    ui = Ui_Form()
    sys.exit(app.exec_())
Откажитесь пока от функций типа retransliteUI, _fromUtf8, если начинаете учиться.
а на счёт событий советую почитать эту и эту статьи. От Py Qt внутри ничем не отличается .
1
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 18
27.07.2013, 20:52  [ТС] 8
Итак, я более-менее разобрался и теперь все работает, но я хочу немного расширить задачу...
Код:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class MyForma1(object):
    def AddWidgets1(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(613, 545)
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(244, 352, 111, 51))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(242, 290, 111, 20))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
     
        self.retranslateUi(Form)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.changeText)
 
    def retranslateUi(self, Form):
        self.pushButton.setText(_translate("Form", "Click me", None))
        self.lineEdit.setText(_translate("Form", "functionvalue", None))
 
 
class MyForma2(QtGui.QDialog, MyForma1):
    def __init__(self, z11=0):
        QtGui.QDialog.__init__(self)
        self.AddWidgets1(self)
        self.z = z11
 
    def myfunc1(self):
        self.z+=1
 
    def changeText(self):
        self.myfunc1()
        self.lineEdit.setText(str(self.z))
 
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Forma = MyForma2()
    Forma.show()
    sys.exit(app.exec_())


Здесь, текст в lineEdit будет меняться только при нажатии кнопки.. А можно-ли как-то сделать так, чтоб значение функции транслировалось в lineEdit постоянно, без участия кнопки? Например, функция может меняться при появлении какого-нибудь события (приход сигнала с датчика) и надо постоянно отслеживать значение этой функции.
0
27.07.2013, 20:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2013, 20:52
Помогаю со студенческими работами здесь

При нажатии на кнопку подсчитывается значение введённого факториала. Результат вывести в свойстве Text
Только начал изучать Forms, и многое не понимаю, а должных примеров, к которым можно прицепиться не...

Как после нажатия на кнопку вывести результат на экран с id textView2 выводился результат функции?
Я новичок и не могу разобраться как вывести результат полученный после нажатия на кнопку на 2 экран...

Как при нажатии на кнопку скрыть окно?
У меня есть основная форма и когда я нажимаю там на кнопку (для действий на другой форме), я хочу,...

Как закрыть окно при нажатии на кнопку
Здравствуйте, есть окно регистрации, при вводе пользователя в текст боксы что угодно и при нажатии...

Как создать дочернее окно при нажатии на кнопку?
Как создать дочернее окно при нажатии на кнопку??? Не получается создать дочернее окно, чтобы оно...

Как сделать,чтобы при нажатии на кнопку открывалось дочернее окно?
Как сделать,чтобы при нажатии на кнопку открывалось дочернее окно?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru