Форум сайта python.su
Сразу говорю, я не программист, а всего лишь пытаюсь для своей работы освоить азы и написать полезные программки,
поэтому просьба не забрасывать гнилыми помидорами, а помочь, если нетрудно.
Выбрал простой пример, который решается в 1 действие. Задаётся площадь, выбирается шаг. Делением площади на шаг получаем длину.
В самом питоне без GUI эту задачу решаю кодом который привожу ниже. (уверен что есть более изящные способы, но этот тоже работает)
# -*- coding: utf-8 -*-
def Length():
Step_type_list = ['Small', 'Medium', 'Large']
Step_type = 'Small' # значение должно выбираться в пользовательском итнерфейсе из выпадающего списка
Step_list = [0.1, 0.2, 0.3]
Step = Step_list[Step_type_list.index(Step_type)]
Area = 100 # значение должно задаваться в пользовательском итнерфейсе
Result = Area / Step # результат необходимо вывести в пользовательский интерфейс
print(Result)
if __name__ == "__main__": Length()
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(314, 228)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.comboBox = QtGui.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(30, 30, 69, 22))
self.comboBox.setObjectName(_fromUtf8("comboBox"))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 10, 71, 16))
self.label.setObjectName(_fromUtf8("label"))
self.lineEdit_Area = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_Area.setGeometry(QtCore.QRect(120, 70, 31, 20))
self.lineEdit_Area.setObjectName(_fromUtf8("lineEdit_Area"))
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 70, 81, 16))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.lineEdit_2 = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(120, 150, 31, 20))
self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(60, 150, 51, 16))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.line = QtGui.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(0, 130, 311, 20))
self.line.setFrameShape(QtGui.QFrame.HLine)
self.line.setFrameShadow(QtGui.QFrame.Sunken)
self.line.setObjectName(_fromUtf8("line"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 314, 20))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Small", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Medium", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "Large", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "Choose step:", None, QtGui.QApplication.UnicodeUTF8))
self.lineEdit_Area.setText(QtGui.QApplication.translate("MainWindow", "100", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Input Area, m2:", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("MainWindow", "Result, m:", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Отредактировано (Май 29, 2011 20:19:06)
Офлайн
модераторы тему переместили из “Python для новичков”.
там можно глупые вопросы задавать, а тут можно нарваца на злых професоналов…
Офлайн
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(314, 228)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.comboBox = QtGui.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(30, 30, 69, 22))
self.comboBox.setObjectName(_fromUtf8("comboBox"))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 10, 71, 16))
self.label.setObjectName(_fromUtf8("label"))
self.lineEdit_Area = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_Area.setGeometry(QtCore.QRect(120, 70, 31, 20))
self.lineEdit_Area.setObjectName(_fromUtf8("lineEdit_Area"))
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 70, 81, 16))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.lineEdit_2 = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(120, 150, 31, 20))
self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(60, 150, 51, 16))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.line = QtGui.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(0, 130, 311, 20))
self.line.setFrameShape(QtGui.QFrame.HLine)
self.line.setFrameShadow(QtGui.QFrame.Sunken)
self.line.setObjectName(_fromUtf8("line"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 314, 20))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
self.comboBox.activated.connect(self.on_combo_activated)
self.lineEdit_Area.textChanged.connect(self.on_input_textChanged)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Small", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Medium", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "Large", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "Choose step:", None, QtGui.QApplication.UnicodeUTF8))
self.lineEdit_Area.setText(QtGui.QApplication.translate("MainWindow", "100", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Input Area, m2:", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("MainWindow", "Result, m:", None, QtGui.QApplication.UnicodeUTF8))
def on_combo_activated(self, index):
self.length()
def on_input_textChanged(self, string):
self.length()
def length(self):
Step_type_list = self.comboBox.currentIndex()
# Step_type = 'Small' # значение должно выбираться в пользовательском итнерфейсе из выпадающего списка
Step_list = [0.1, 0.2, 0.3]
Step = Step_list[Step_type_list]
Area = int(self.lineEdit_Area.text()) # значение должно задаваться в пользовательском итнерфейсе
Result = Area / Step # результат необходимо вывести в пользовательский интерфейс
self.lineEdit_2.setText(str(Result))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Офлайн
Низкий поклон тебе, комрад!
работает. Буду разбираться, и пользоваться в дальнейшем.
Офлайн
Удобней хранить автоматически сгенерированный код отдельно, в таком случае вы всегда сможете изменить разметку окна без переноса функций.
mainwindow.py - сгенерирован автоматом:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(314, 228)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.comboBox = QtGui.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(30, 30, 69, 22))
self.comboBox.setObjectName(_fromUtf8("comboBox"))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 10, 71, 16))
self.label.setObjectName(_fromUtf8("label"))
self.lineEdit_Area = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_Area.setGeometry(QtCore.QRect(120, 70, 31, 20))
self.lineEdit_Area.setObjectName(_fromUtf8("lineEdit_Area"))
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 70, 81, 16))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.lineEdit_2 = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(120, 150, 31, 20))
self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2"))
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(60, 150, 51, 16))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.line = QtGui.QFrame(self.centralwidget)
self.line.setGeometry(QtCore.QRect(0, 130, 311, 20))
self.line.setFrameShape(QtGui.QFrame.HLine)
self.line.setFrameShadow(QtGui.QFrame.Sunken)
self.line.setObjectName(_fromUtf8("line"))
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 314, 20))
self.menubar.setObjectName(_fromUtf8("menubar"))
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Small", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Medium", None, QtGui.QApplication.UnicodeUTF8))
self.comboBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "Large", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "Choose step:", None, QtGui.QApplication.UnicodeUTF8))
self.lineEdit_Area.setText(QtGui.QApplication.translate("MainWindow", "100", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Input Area, m2:", None, QtGui.QApplication.UnicodeUTF8))
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from PyQt4 import QtCore, QtGui, Qsci
from mainwindow import Ui_MainWindow
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
self.comboBox.activated.connect(self.on_combo_activated)
self.lineEdit_Area.textChanged.connect(self.on_input_textChanged)
def on_combo_activated(self, index):
self.length()
def on_input_textChanged(self, string):
self.length()
def length(self):
Step_type_list = self.comboBox.currentIndex()
# Step_type = 'Small' # значение должно выбираться в пользовательском итнерфейсе из выпадающего списка
Step_list = [0.1, 0.2, 0.3]
Step = Step_list[Step_type_list]
Area = int(self.lineEdit_Area.text()) # значение должно задаваться в пользовательском итнерфейсе
Result = Area / Step # результат необходимо вывести в пользовательский интерфейс
self.lineEdit_2.setText(str(Result))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
Офлайн
Друзья, в примере вы мне показали, как активируются ComboBox и LineEdit.
Подскажите еще пожалуйста как оживить другие виджеты. Конкретно сейчас интересует chekbox.
Как будут выглядеть строки оживления для аналогичного примера с QTDesigner-ским кодом?
Если есть ссылка где доступно описаны такие варианты, киньте пожалуйста, чтоб я по отдельным виджетам не дёргал.
Все мои попытки найти что-то путёвое самостоятельно ничем хорошим не закончились.
http://zetcode.com/tutorials/pyqt4/widgets/
например из этой ссылки не получается удачно присобачить, чтоб работало.
Офлайн
Дык Вы про signal/slot механизм поняли? Находите у виджета удобный сигнал и соединяете его со своим обработчиком…
http://doc.qt.nokia.com/4.7/qcheckbox.html#stateChanged
Офлайн
понять то может и поняли, но чтоб применить это понимание пока что без примеров не обойтись.
тут кагбэ синтаксис важен. по ссылке этой тоже раньше оказывался, но каюсь нихера не понимаю )) как можно воспользоваться этими выкладками?
оно для меня там в каком-то абстрактном виде, на примерах как-то более понятно. еще не дорос до того чтобы понимать как мне может помочь строка типа этой:
bool QCheckBox::event ( QEvent * e )
ps. Studentik, спасибо за помощь по всем предыдущим вопросам.
сори за нубизм.
Отредактировано (Июнь 8, 2011 13:13:39)
Офлайн
Разжевываю:
1) Открывайте справку по QCheckBox и внимательно посмотрите на единственный сигнал “stateChanged” и его аргументы
2) в своем коде сделайте функцию с аргументами, как у stateChanged
3) в своем коде где-то выполните your_check_box.stateChanged.connect(your_handler)
4) PROFIT!
Офлайн
StudentikГран мэрси! Буду пробовать.
Разжевываю:
1) Открывайте справку по QCheckBox и внимательно посмотрите на единственный сигнал “stateChanged” и его аргументы
2) в своем коде сделайте функцию с аргументами, как у stateChanged
3) в своем коде где-то выполните your_check_box.stateChanged.connect(your_handler)
4) PROFIT!
Офлайн