1
Главное окно объявлено в Class1. Я пытаюсь создать объект класса 2, создать виджет (кнопку) и подключить его к слоту.слоты в классе, где главное окно не было объявлено
import sys
from PyQt4 import QtGui,QtCore
class Class2(object):
def __init__(self,parent):
return
def button(self,parent):
self.print_button=QtGui.QPushButton("print hello",parent)
self.print_button.show()
self.print_button.clicked.connect(self.print_hello)
def print_hello(self,parent):
print 'hello'
class Class1(QtGui.QMainWindow):
def __init__(self):
super(Class1, self).__init__()
self.welcomeScreen()
def welcomeScreen(self):
obj=Class2(self)
obj.button(self)
def main():
app = QtGui.QApplication(sys.argv)
mw = Class1()
mw.show()
sys.exit(app.exec_())
if __name__=='__main__':
main()
Теперь кнопка создается, но слот не работает. Как справиться с этой проблемой?
я не понимаю лямбда ?? почему он не работает без лямбды? – fecub
, потому что вам нужно передать указатель на функцию, которая возвращается лямбдой. Без lambda 'self.print_hello (self)' будет возвращать 'None', и, следовательно,' None' будет передан как указатель функции, поэтому слот не будет работать. Лямбда - отличный инструмент. Он создает новую функцию «anonymoys», которая выполняет то, что мы определяем, и возвращает указатель на нее. В этом примере выполняется 'self.print_hello (self)'. Без лямбда мы не можем передавать аргументы указателю. –
ах, я это понимаю! большое спасибо! – fecub