2015-04-22 125 views
1

所以我的问题是,而不是手动为一堆按钮手动编写一吨代码,我想创建一个QPushButton类,然后更改这么多的变量在调用该类创建我个人的按钮。PyQT按钮单击不起作用

我的问题是,尽管调用了clicked.connect函数并且在运行代码时没有错误,但我的按钮似乎无法点击。下面是按钮类的相关部分:

class Button(QtGui.QPushButton): 
    def __init__(self, parent): 
     super(Button, self).__init__(parent) 
     self.setAcceptDrops(True) 

     self.setGeometry(QtCore.QRect(90, 90, 61, 51)) 
     self.setText("Change Me!") 

    def retranslateUi(self, Form): 
     self.clicked.connect(self.printSomething) 

    def printSomething(self): 
     print "Hello" 

这里是我如何调用按钮类:

class MyWindow(QtGui.QWidget): 
    def __init__(self): 
     super(MyWindow,self).__init__() 
     self.btn = Button(self) 

     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.btn) 
     self.setLayout(layout) 

回答

1

您应该执行到连接上的__init__方法点击信号:

from PyQt4 import QtGui,QtCore 

class Button(QtGui.QPushButton): 
    def __init__(self, parent): 
     super(Button, self).__init__(parent) 
     self.setAcceptDrops(True) 

     self.setGeometry(QtCore.QRect(90, 90, 61, 51)) 
     self.setText("Change Me!") 
     self.clicked.connect(self.printSomething) #connect here! 

    #no need for retranslateUi in your code example 

    def printSomething(self): 
     print "Hello" 

class MyWindow(QtGui.QWidget): 
    def __init__(self): 
     super(MyWindow,self).__init__() 
     self.btn = Button(self) 

     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.btn) 
     self.setLayout(layout) 


app = QtGui.QApplication([]) 
w = MyWindow() 
w.show() 
app.exec_() 

你可以运行它并会看到你好打印在每次点击按钮时控制台。

retranslateUi方法是针对i18n。你可以检查here

+0

非常感谢,我被困了几个小时,真的无处可去,非常感谢! –

+0

不客气 –