Форум сайта python.su
Нажав на кнопку “Расчёт” программа выводит в текстовое поле перечень вариантов расчёта.
Далее пользователь в поле ввода пишет нужный вариант (1 или другую цифру) и нажимает на кнопку “Ввести”. После чего программа должна взять число пользователя в функцию обработчика “on_click” и продолжить его работу.
Я не понимаю, как совместить работу двух обрабочиков “on_click” и “on_click_Vvod”.
Подскажите, пожалуйста!
# Python 3. PyQt4 # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore # Графика class Window(QtGui.QWidget): # Класс Window наследует класс QWidget def __init__(self, parent=None): # Создаёт конструктор класса, parent - ссылка на родительский эл-т QtGui.QWidget.__init__(self, parent) self.resize(300, 300) # шир / выс окна # Блок именования полей. В столбец 1 self.lbl_Console = QtGui.QLabel('Расчёт') self.lbl_Vvod = QtGui.QLabel('Ввод') self.button_1 = QtGui.QPushButton('Ввести') # Отправка сообщений программе для поля Vv self.button_2 = QtGui.QPushButton('Расчёт') # Запуск расчёта # Блок создания полей. В столбец 2 self.Pole_Console = QtGui.QTextEdit() # Показывает ход вычислений self.Pole_Vvod = QtGui.QLineEdit() # Для ответов на вопросы программы + команды # Кнопка self.button_2.clicked.connect(self.on_click) self.Pole_Vvod.returnPressed.connect(self.on_click_Vvod) self.button_1.clicked.connect(self.on_click_Vvod) # Блок разметки grid = QtGui.QGridLayout() # создание сетки grid.setSpacing(10) # Устанавливает расстояние между компонентами grid.addWidget(self.lbl_Console, 1, 0) grid.addWidget(self.Pole_Console, 1, 1, 1, 2) grid.addWidget(self.button_2, 0, 2) grid.addWidget(self.lbl_Vvod, 2, 0) grid.addWidget(self.Pole_Vvod, 2, 1, 1, 1) # компонент, стр, стлб, кол об стр, кол об стлб grid.addWidget(self.button_1, 2, 2) self.setLayout(grid) # установка менеджера компоновки def on_click(self): def cnsl(i): self.Pole_Console.setText(i) cnsl('''Выбрать вариант: 1. расчёт объёма 2. расчёт площади''') vvod = int(self.Pole_Vvod.text()) if vvod == 1: cnsl('выбран расчёт объёма') else: cnsl('выбран расчёт площади') def on_click_Vvod(self): self.Pole_Console.append(self.Pole_Vvod.text()) # Концовка app = QtGui.QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
Офлайн
имхо “ввести” у тебя лишнее
QLineEdit.returnPressed вполне достаточно
но можешь вызвать из одного обработчика другой
def on_click_Vvod(self): self.on_click()
Офлайн
vic57В смысле кнопка “ввести” лишняя? Но так не получится. Когда функция on_click() запущена, то в поле Pole_Vvod ещё нет числа, поэтому и возвращать из Pole_Vvod в on_click() с помощью QLineEdit.returnPressed нечего.
имхо “ввести” у тебя лишнее QLineEdit.returnPressed вполне достаточно можешь вызвать из одного обработчика другой
def on_click_Vvod(self): self.on_click()
Офлайн
как-то у тебя все сложно
алгоритм:
1. выбор типа расчета (QComboBox)
2. ввод данных (QLineEdit)
3. расчет и вывод результата (QPlainTextEdit)
# -*- coding:utf-8 -*- from PyQt4.Qt import * class View(QWidget): def __init__(self): QWidget.__init__(self) self.box = QComboBox() self.plain = QPlainTextEdit() self.edit = QLineEdit() self.lay = QVBoxLayout(self) self.lay.addWidget(self.box) self.lay.addWidget(self.plain) self.lay.addWidget(self.edit) self.edit.setEnabled(False) self.box.addItems([u'Выбор',u'Площадь круга', u'Площадь прямоугольника']) self.box.currentIndexChanged.connect(self.on_box) self.edit.returnPressed.connect(self.on_edit) def on_box(self,index): if not index: self.edit.clear() self.edit.setPlaceholderText('') self.edit.setEnabled(False) self.plain.clear() elif index == 1: self.edit.setEnabled(True) self.edit.clear() self.edit.setPlaceholderText(u'Введите радиус и нажмите Enter') elif index == 2: self.edit.setEnabled(True) self.edit.clear() self.edit.setPlaceholderText(u'Введите X,Y и нажмите Enter') def on_edit(self): index = self.box.currentIndex() lst = str(self.edit.text()).split(',') arr = [float(i) for i in lst] if index == 1: result = 2*3.1415*arr[0] self.plain.insertPlainText('R='+ lst[0]+'\n') self.plain.insertPlainText(u'Площадь круга: '+ str(result)+'\n') elif index == 2: result = arr[0]*arr[1] self.plain.insertPlainText('X='+ lst[0] +' Y=' + lst[1]+ '\n') self.plain.insertPlainText(u'Площадь прямоугольника: '+ str(result)+'\n') if __name__ == "__main__": app = QApplication([]) v = View() v.resize(400,300) v.move(0,0) v.show() app.exec_()
Отредактировано vic57 (Янв. 21, 2017 10:36:47)
Офлайн
vic57Мне было очень интересно посмотреть на эту программу. Теперь я знаю, как работает ComboBox, за что большое спасибо!
алгоритм:
1. выбор типа расчета (QComboBox)
2. ввод данных (QLineEdit)
3. расчет и вывод результата (QPlainTextEdit)
Офлайн
'u' - unicode python-2.7
Офлайн
Kyrymну да , обшибся
Должен заметить, что 2*Пи*R - это длина дуги. Площадь круга: Пи * R^2.
Отредактировано vic57 (Янв. 24, 2017 17:54:27)
Офлайн