Форум сайта python.su
В целях самообучения решил сделать калькулятор.
Код, помимо GUI:
#-*- coding: utf-8 -*-
__author__ = 'Петров Егор'
from PyQt4 import QtCore, QtGui
import sys, calc_ui, string
app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
ui = calc_ui.Ui_Dialog()
ui.setupUi(window)
window.show()
class Calculate:
def __init__(self):
self.result = 0
class DisplayLCD:
def __init__(self):
self.current = '0'
ui.lcdNumber.display(self.current)
def set_digit(self, digit):
self.current = self.current + digit
ui.lcdNumber.display(int(self.current))
Display = DisplayLCD()
QtCore.QObject.connect(ui.Button_1, QtCore.SIGNAL('clicked()'), Display.set_digit)
sys.exit(app.exec_())
Офлайн
Что-то я не разобрался в коде до конца если честно что он должен делать, попробую общие моменты написать, может поможет.
Надо как минимум наследовать от QObject класс который будет должен принимать или посылать сигналы.
И вот пример использования сигнала с параметром:
class mainForm(QWidget, Ui_mainForm):
"""
Class documentation goes here.
"""
def __init__(self, parent = None):
"""
Constructor
"""
QWidget.__init__(self, parent)
self.setupUi(self)
# Тут часть кода пропустил
self.connect(self.proxyCombo, SIGNAL("currentIndexChanged(int)"), self.changeProxy)
def changeProxy(self, index):
#print index
self.proxytype = index
Офлайн
Сумбур в голове враг всего…
Пытаюсь сделать, чтобы когда нажимаешь на цифру на клавиатуре калькулятора (которая нарисована в ку дезигнере), эта цифра появлялась на LCDNumber-е. А если нажимаешь вторую, то она добавлялась к первой… Код на работе остался. :(
Офлайн
HayateВот полный “проект”. http://narod.ru/disk/24083182001/calc.zip.html
Сумбур в голове враг всего…
Пытаюсь сделать, чтобы когда нажимаешь на цифру на клавиатуре калькулятора (которая нарисована в ку дезигнере), эта цифра появлялась на LCDNumber-е. А если нажимаешь вторую, то она добавлялась к первой… Код на работе остался. :(
Отредактировано (Сен. 5, 2011 13:20:15)
Офлайн
plusplusКак я понял, метод changeProxy должен принять параметр, который затем присваивается атрибуту index, так вот как ему этот параметр передать?
Что-то я не разобрался в коде до конца если честно что он должен делать, попробую общие моменты написать, может поможет.
Надо как минимум наследовать от QObject класс который будет должен принимать или посылать сигналы.
И вот пример использования сигнала с параметром:class mainForm(QWidget, Ui_mainForm):
"""
Class documentation goes here.
"""
def __init__(self, parent = None):
"""
Constructor
"""
QWidget.__init__(self, parent)
self.setupUi(self)
# Тут часть кода пропустил
self.connect(self.proxyCombo, SIGNAL("currentIndexChanged(int)"), self.changeProxy)
def changeProxy(self, index):
#print index
self.proxytype = index
self.connect(self.proxyCombo, SIGNAL("currentIndexChanged(int)"), self.changeProxy(parametr))
Офлайн
HayateУ меня уже рабочий пример был, как только изменяется значение QComboBox, то он посылает сигнал с параметром - текущем индексом элемента. Вот к нему коннектим наш слот changeProxy и в нём имеем это значение индекса. У меня был приведен точно рабочий пример, а что у тебя будет я не знаю, возможно интерпретатор выдаст ошибку.plusplusКак я понял, метод changeProxy должен принять параметр, который затем присваивается атрибуту index, так вот как ему этот параметр передать?
Что-то я не разобрался в коде до конца если честно что он должен делать, попробую общие моменты написать, может поможет.
Надо как минимум наследовать от QObject класс который будет должен принимать или посылать сигналы.
И вот пример использования сигнала с параметром:class mainForm(QWidget, Ui_mainForm):
"""
Class documentation goes here.
"""
def __init__(self, parent = None):
"""
Constructor
"""
QWidget.__init__(self, parent)
self.setupUi(self)
# Тут часть кода пропустил
self.connect(self.proxyCombo, SIGNAL("currentIndexChanged(int)"), self.changeProxy)
def changeProxy(self, index):
#print index
self.proxytype = indexВот так вот?self.connect(self.proxyCombo, SIGNAL("currentIndexChanged(int)"), self.changeProxy(parametr))
Офлайн
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, string
from calc_ui import *
class Calc(QtGui.QDialog, Ui_Dialog):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setupUi(self)
QtCore.QObject.connect(self.Button_1, QtCore.SIGNAL('clicked()'), lambda: self.set_digit("1"))
QtCore.QObject.connect(self.Button_2, QtCore.SIGNAL('clicked()'), lambda: self.set_digit("2"))
def set_digit(self, value):
if not self.lcdNumber.intValue() == 0: self.lcdNumber.setProperty("value",QtCore.QVariant(float(str(self.lcdNumber.intValue())+value)))
else: self.lcdNumber.setProperty("value",QtCore.QVariant(float(value)))
app = QtGui.QApplication(sys.argv)
window = Calc()
window.show()
sys.exit(app.exec_())
Отредактировано (Сен. 7, 2011 03:47:53)
Офлайн
RodegastСпасибо, про лямбду нашёл, почитал, понял.if not self.lcdNumber.intValue() == 0: self.lcdNumber.setProperty("value",float(str(self.lcdNumber.intValue())+value))
Офлайн
Пиши как тебе нравится. Можешь даже так:
if self.lcdNumber.intValue():
Офлайн