2014-01-25 113 views
0

我正在尝试使GUI应用程序更改右侧按钮上的图标! 这是我简单的代码:单击按钮图标更改

import sys 
from PySide.QtCore import * 
from PySide.QtGui import * 

class Ui_MainWindow(QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.setupUi() 

    def setupUi(self): 
     widget = QWidget() 
     layout = QGridLayout() 
     self.buttons = list() 

     for x in range(3): 
      row = list() 
      for y in range(3): 
       button = QPushButton(QIcon('Empty-Cell.png'), '{},{}'.format(x, y)) 
       button.clicked.connect(self.button_click) 
       row.append(button) 
       layout.addWidget(button, x, y) 
      self.buttons.append(row) 

     widget.setLayout(layout) 
     self.setCentralWidget(widget) 

    def button_click(self): 
     # Change icon HERE! 

def main(): 
    app = QApplication(sys.argv) 
    ui = Ui_MainWindow() 
    ui.show() 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    main() 

这里的形象:

Link of the GUI Application

我一直在尝试了几个小时,但我还是不能够做到这一点,任何想法? 如果可能,我还想使用图像小部件而不是按钮,标签或whatelse。

谢谢!

回答

0

您可以使用QObject::sender来获取点击的按钮。

def button_click(self): 
    test_pixmap = QPixmap(16, 16) 
    test_pixmap.fill(Qt.red) 
    self.sender().setIcon(QIcon(test_pixmap)) 
+0

好,它的工作原理!有没有什么办法让widget图片可点击,而不是使用按钮? –

+0

小工具图像是什么意思?你可以通过在其上安装事件过滤器来获得任何小部件的点击事件(例如,可以显示像素图的QLabel)。即调用'self.label.installEventFilter(self)'并实现主窗口类的'eventFilter'方法。 –