Форум сайта python.su
Добрый день!
Назначаю обработчик для кнопки:
self.button.clicked.connect(self.buttonClicked)
def buttonClicked(self, stroka = None): ...
self.connect(self.button, QtCore.SIGNAL('clicked()'), self.buttonClicked)
Офлайн
Red_baronсамому интересно
получается stroka = False, а хотелось бы, если я не передаю параметр, получить stroka = None
from PyQt4 import QtGui, QtCore import sys from functools import partial class Widget(QtGui.QWidget): def __init__(self,parent=None): QtGui.QWidget.__init__(self, parent) self.button = QtGui.QPushButton("Button", self) self.button.clicked.connect(partial(self.buttonClicked)) def buttonClicked(self, **arg): if arg: for key in arg: if key == 'stroka': stroka = arg[key] else: stroka = None else: stroka = None print stroka app = QtGui.QApplication(sys.argv) main = Widget() main.show() sys.exit(app.exec_())
def buttonClicked(self, stroka=None): if not stroka: stroka = None print stroka
Отредактировано vrabey (Апрель 14, 2014 11:17:08)
Офлайн
Red_baron
Проблема, что в обработчик передается False, т.е. получается stroka = False, а хотелось бы, если я не передаю параметр, получить stroka = None.
#!/usr/bin/env python3 # по мотивам ZetCode PyQt4 tutorial # отображает состояние нажатой кнопки import sys from PyQt4 import QtGui, QtCore class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.button = QtGui.QPushButton('Test', self) self.button.setCheckable(True) self.button.clicked[bool].connect(self.buttonClicked) self.label = QtGui.QLabel(self) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.button) hbox.addWidget(self.label) self.setLayout(hbox) self.setGeometry(300, 300, 280, 170) self.setWindowTitle('Button Signal') self.show() def buttonClicked(self, checked): arg = str(checked) name = self.sender().text() self.label.setText('{}, {}'.format(arg, name)) def main(): app = QtGui.QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) if __name__ == '__main__': main()
Отредактировано py.user.next (Апрель 15, 2014 02:11:28)
Офлайн
vrabeyСпасибо, я соорудил похожую конструкцию.
если известно что аргумент только один (stroka)
то вообще так:
def buttonClicked(self, stroka=None):
if not stroka:
stroka = None
print stroka
но что-то мне подсказывает, что есть Правильный способ…
py.user.next
про какой параметр речь ?
это определённый аргумент, который туда всегда передаётся
если кнопка нажимаемая (можно нажать и она останется нажата), то он получает значение сигнала
Red_baron
При старом стиле все работает нормально:
self.connect(self.button, QtCore.SIGNAL('clicked()'), self.buttonClicked)
Отредактировано Red_baron (Апрель 15, 2014 06:34:54)
Офлайн
Red_baronself.connect(self.button, QtCore.SIGNAL(“clicked(bool)”), self.buttonClicked)
При старом стиле ничего не передается
Офлайн
Red_baronтам, походу, по разному можно его запускать
Вы не правы. При старом стиле ничего не передается.
TypeError: buttonClicked() missing 1 required positional argument: 'checked'
Red_baronа как она получается False, сама собой ?
Проблема, что в обработчик передается False, т.е. получается stroka = False
Отредактировано py.user.next (Апрель 15, 2014 10:11:42)
Офлайн
По идее эти назначения эквивалентны:
self.connect(self.button, QtCore.SIGNAL('clicked()'), self.buttonClicked) ... self.button.clicked.connect(self.buttonClicked)
Офлайн