Найти - Пользователи
Полная версия: PyQt, передать с сигналом параметр
Начало » GUI » PyQt, передать с сигналом параметр
1
Hayate
В целях самообучения решил сделать калькулятор.
Код, помимо 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_())
Как сделать, чтобы set_digit(self, digit) получала параметр digit?
Чтобы было 10 кнопок, 10 сигналов, 10 цифр.
plusplus
Что-то я не разобрался в коде до конца если честно что он должен делать, попробую общие моменты написать, может поможет.
Надо как минимум наследовать от 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
Hayate
Сумбур в голове враг всего…
Пытаюсь сделать, чтобы когда нажимаешь на цифру на клавиатуре калькулятора (которая нарисована в ку дезигнере), эта цифра появлялась на LCDNumber-е. А если нажимаешь вторую, то она добавлялась к первой… Код на работе остался. :(
Hayate
Hayate
Сумбур в голове враг всего…
Пытаюсь сделать, чтобы когда нажимаешь на цифру на клавиатуре калькулятора (которая нарисована в ку дезигнере), эта цифра появлялась на LCDNumber-е. А если нажимаешь вторую, то она добавлялась к первой… Код на работе остался. :(
Вот полный “проект”. http://narod.ru/disk/24083182001/calc.zip.html
Что-то файлы не прикрепляются на форуме…
Щас ещё про сигналы почитаю.
Hayate
plusplus
Что-то я не разобрался в коде до конца если честно что он должен делать, попробую общие моменты написать, может поможет.
Надо как минимум наследовать от 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
Как я понял, метод changeProxy должен принять параметр, который затем присваивается атрибуту index, так вот как ему этот параметр передать?
self.connect(self.proxyCombo, SIGNAL("currentIndexChanged(int)"), self.changeProxy(parametr))
Вот так вот?
plusplus
Hayate
plusplus
Что-то я не разобрался в коде до конца если честно что он должен делать, попробую общие моменты написать, может поможет.
Надо как минимум наследовать от 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
Как я понял, метод changeProxy должен принять параметр, который затем присваивается атрибуту index, так вот как ему этот параметр передать?
self.connect(self.proxyCombo, SIGNAL("currentIndexChanged(int)"), self.changeProxy(parametr))
Вот так вот?
У меня уже рабочий пример был, как только изменяется значение QComboBox, то он посылает сигнал с параметром - текущем индексом элемента. Вот к нему коннектим наш слот changeProxy и в нём имеем это значение индекса. У меня был приведен точно рабочий пример, а что у тебя будет я не знаю, возможно интерпретатор выдаст ошибку.
Rodegast
#!/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_())
Hayate
Rodegast
if not self.lcdNumber.intValue() == 0: self.lcdNumber.setProperty("value",float(str(self.lcdNumber.intValue())+value))
Спасибо, про лямбду нашёл, почитал, понял.
А вот в куске выше, есть какой-то особый смысл писать именно так, а не простой if и != ?
Rodegast
Пиши как тебе нравится. Можешь даже так:
if self.lcdNumber.intValue():
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB