Rodegast
Ну если знаешь, то почему “ручками”?
Потому что так я учусь коду.
Rodegast
Потому что оконный менеджер ничего не будет знать о типе окна и следовательно его поведение может быть не правильным.
Я так ничего и не понял. Программы на QWidget работают. В обучениях про этот класс пишут. О типе окна в данном классе говорит параметр flags или аналогичный метод. Я их, правда, не пробовал, но и надобности не было. Наверное, пойму Вашу мысль, на своём опыте.
Так-с… С кнопкой у меня получилось запустить расчёт формулы - посчитать объём. Результат выводится в многострочное поле “Расчёт 2” (см. код 1).
Мои новые вопросы:1. Пробовал засунуть функцию viv(i) в класс Window. На эту функцию идёт ссылка из функции def on_click(self). Но почему-то viv(i) не срабатывает (см. код 2).
2. Не пойму, как запустить расчёт без кнопки. Т.е. я начинаю заполнять поля a, b, h, а объём сразу начинает рассчитываться.
Для однострочного текста я нашёл метод “editingFinished” - я так понимаю, передача сигнала должна начинаться после ввода числа в поле и перехода в другое поле.
Как-то так:
self.a_Edit.editingFinished.connect(self.on_click2)
self.b_Edit.editingFinished.connect(self.on_click2)
self.h_Edit.editingFinished.connect(self.on_click2)
А что дальше?
Код 1 # Python 3. PyQt4
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
# Логика
data = []
def viv(i): # для отчёта
i = ''.join(map(str, i))
data.append(i)
# Функция расчёта площади
def S(S):
S = a*b
i = ["S = a∙b = ",a,"∙",b," = ",S]
viv(i)
# Функция для отчёта
def Otchet(i):
for i in data:
print(i)
# Графика
class Window(QtGui.QWidget): # Класс Window наследует класс QWidget
def __init__(self, parent=None): # Создаёт конструктор класса, parent - ссылка на родительский эл-т
QtGui.QWidget.__init__(self, parent)
self.setMinimumSize(300, 400) # Миниамльная ширина и высота окна
self.setWindowTitle('Программа') # Заголовок
self.setWindowIcon(QtGui.QIcon('RP\icon.png')) # Иконка
# self.statusBar() - не работает
# Блок именования полей. В столбец 1
self.a = QtGui.QLabel('Длина a =')
self.b = QtGui.QLabel('Ширина b =')
self.h = QtGui.QLabel('Высота h =')
self.Viv = QtGui.QLabel('Расчёт')
self.Vv = QtGui.QLabel('Ввод')
self.button1 = QtGui.QPushButton('Ввести') # Отправка сообщений программе для поля Vv
self.Viv_2 = QtGui.QLabel('Расчёт 2')
# Блок создания полей. В столбец 2
self.a_Edit = QtGui.QLineEdit()
self.b_Edit = QtGui.QLineEdit()
self.h_Edit = QtGui.QLineEdit()
# self.Vv_Edit = QtGui.QTextEdit()
self.Vv_Edit = QtGui.QLineEdit() # Для ответов на вопросы программы + команды
self.Viv_Obl = QtGui.QScrollArea() # Показывает ход вычислений
self.Viv_Obl_2 = QtGui.QTextEdit() # Создаю компонент многострочного текста в область прокрутки
'''setWidget.Viv_Obl_2'''
# Расширение свойств полей
# Варианты значений
'''arr = [25,28,30,48]
completer = QtGui.QCompleter(arr, window)
b_Edit.setCompleter(completer)'''
'''self.Viv_Obl_2.setText('sss')'''
# Методы полей
'''self.Viv_Obl_2.setText('sss'+'+dd=')'''
# self.a_Edit.editingFinished.connect(V)
# self.b_Edit.editingFinished.connect(V)
# self.h_Edit.editingFinished.connect(V)
# self.Vv.returnPressed.connect(self.)
# self.Viv_Obl_2.setText.connect(V)
# Кнопка
self.a_Edit.returnPressed.connect(self.on_click)
self.button1.clicked.connect(self.on_click)
# Блок разметки
grid = QtGui.QGridLayout() # создание сетки
grid.setSpacing(10) # ????
grid.addWidget(self.a, 1, 0)
grid.addWidget(self.a_Edit, 1, 1)
grid.addWidget(self.b, 2, 0)
grid.addWidget(self.b_Edit, 2, 1)
grid.addWidget(self.h, 3, 0)
grid.addWidget(self.h_Edit, 3, 1)
grid.addWidget(self.Viv, 4, 0)
grid.addWidget(self.Viv_Obl, 4, 1, 1, 2)
grid.addWidget(self.Vv, 5, 0)
grid.addWidget(self.Vv_Edit, 5, 1, 1, 1) # компонент, стр, стлб, кол об стр, кол об стлб
grid.addWidget(self.button1, 5, 2)
grid.addWidget(self.Viv_2, 6, 0)
grid.addWidget(self.Viv_Obl_2, 6, 1)
self.setLayout(grid) # ????
self.resize(150, 100) # ????
def on_click(self):
a = float(self.a_Edit.text())
b = float(self.b_Edit.text())
h = float(self.h_Edit.text())
V = a*b*h
i = ["V = a∙b∙h = ",a,"∙",b,"∙",h," = ",V]
# viv(i)
i = ''.join(map(str, i))
self.Viv_Obl_2.setText(str(i))
# self.Viv_Obl_2.setText('Итог: '+str(float(self.a_Edit.text()))) # работает
# Концовка
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
Код 2 # Python 3. PyQt4
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
# Логика
data = []
# Функция расчёта площади
def S(S):
S = a*b
i = ["S = a∙b = ",a,"∙",b," = ",S]
viv(i)
# Функция для отчёта
def Otchet(i):
for i in data:
print(i)
# Графика
class Window(QtGui.QWidget): # Класс Window наследует класс QWidget
def __init__(self, parent=None): # Создаёт конструктор класса, parent - ссылка на родительский эл-т
QtGui.QWidget.__init__(self, parent)
self.setMinimumSize(300, 400) # Миниамльная ширина и высота окна
self.setWindowTitle('Программа') # Заголовок
self.setWindowIcon(QtGui.QIcon('RP\icon.png')) # Иконка
# self.statusBar() - не работает
# Блок именования полей. В столбец 1
self.a = QtGui.QLabel('Длина a =')
self.b = QtGui.QLabel('Ширина b =')
self.h = QtGui.QLabel('Высота h =')
self.Viv = QtGui.QLabel('Расчёт')
self.Vv = QtGui.QLabel('Ввод')
self.button1 = QtGui.QPushButton('Ввести') # Отправка сообщений программе для поля Vv
self.Viv_2 = QtGui.QLabel('Расчёт 2')
# Блок создания полей. В столбец 2
self.a_Edit = QtGui.QLineEdit()
self.b_Edit = QtGui.QLineEdit()
self.h_Edit = QtGui.QLineEdit()
# self.Vv_Edit = QtGui.QTextEdit()
self.Vv_Edit = QtGui.QLineEdit() # Для ответов на вопросы программы + команды
self.Viv_Obl = QtGui.QScrollArea() # Показывает ход вычислений
self.Viv_Obl_2 = QtGui.QTextEdit() # Создаю компонент многострочного текста в область прокрутки
'''setWidget.Viv_Obl_2'''
# Расширение свойств полей
# Варианты значений
'''arr = [25,28,30,48]
completer = QtGui.QCompleter(arr, window)
b_Edit.setCompleter(completer)'''
'''self.Viv_Obl_2.setText('sss')'''
# Методы полей
'''self.Viv_Obl_2.setText('sss'+'+dd=')'''
# self.a_Edit.editingFinished.connect(V)
# self.b_Edit.editingFinished.connect(V)
# self.h_Edit.editingFinished.connect(V)
# self.Vv.returnPressed.connect(self.)
# self.Viv_Obl_2.setText.connect(V)
# Кнопка
self.a_Edit.returnPressed.connect(self.on_click)
self.button1.clicked.connect(self.on_click)
# Блок разметки
grid = QtGui.QGridLayout() # создание сетки
grid.setSpacing(10) # ????
grid.addWidget(self.a, 1, 0)
grid.addWidget(self.a_Edit, 1, 1)
grid.addWidget(self.b, 2, 0)
grid.addWidget(self.b_Edit, 2, 1)
grid.addWidget(self.h, 3, 0)
grid.addWidget(self.h_Edit, 3, 1)
grid.addWidget(self.Viv, 4, 0)
grid.addWidget(self.Viv_Obl, 4, 1, 1, 2)
grid.addWidget(self.Vv, 5, 0)
grid.addWidget(self.Vv_Edit, 5, 1, 1, 1) # компонент, стр, стлб, кол об стр, кол об стлб
grid.addWidget(self.button1, 5, 2)
grid.addWidget(self.Viv_2, 6, 0)
grid.addWidget(self.Viv_Obl_2, 6, 1)
self.setLayout(grid) # ????
self.resize(150, 100) # ????
def viv(i): # для отчёта
i = ''.join(map(str, i))
data.append(i)
def on_click(self):
a = float(self.a_Edit.text())
b = float(self.b_Edit.text())
h = float(self.h_Edit.text())
V = a*b*h
i = ["V = a∙b∙h = ",a,"∙",b,"∙",h," = ",V]
viv(i)
self.Viv_Obl_2.setText(str(i))
# Концовка
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())