2014-09-19 56 views
2

我有一個包含QGroupBox的QDialog,其中inturn包含一些QPushButton。我想區分被點擊的QPushButton和所有剩餘的QPushButton的背景顏色。如何使用pyqgis來實現這一點?如何迭代QPushButton

回答

0

如果使用類QtGui.QGroupBox的理由是單選按鈕,就像單選按鈕一樣,您可以使用Qt樣式表設置差異背景色;

import sys 
from PyQt4 import QtGui 

class QCustomDialog (QtGui.QDialog): 
    def __init__(self, *args, **kwargs): 
     QtGui.QDialog.__init__(self, *args, **kwargs) 
     myQVBoxLayout = QtGui.QVBoxLayout() 
     for text in ['PyQt', 'Stack', 'Overflow']: 
      myQPushButton = QtGui.QPushButton(text) 
      myQPushButton.setCheckable(True) 
      myQPushButton.setAutoExclusive(True) 
      myQVBoxLayout.addWidget(myQPushButton) 
     myQVBoxLayout.addStretch(1) 
     myQGroupBox = QtGui.QGroupBox() 
     myQGroupBox.setStyleSheet(''' 
      QPushButton { 
       border: 0px; 
       color: rgb(255, 255, 255); 
       background-color: rgb(0, 0, 0); 
      } 
      QPushButton:checked { 
       border: 0px; 
       color: rgb(255, 255, 255); 
       background-color: rgb(255, 0, 0); 
      } 
     ''') 
     myQGroupBox.setLayout(myQVBoxLayout) 
     allQVBoxLayout = QtGui.QVBoxLayout() 
     allQVBoxLayout.addWidget(myQGroupBox) 
     self.setLayout(allQVBoxLayout) 

myQApplication = QtGui.QApplication([]) 
myQCustomDialog = QCustomDialog() 
myQCustomDialog.show() 
sys.exit(myQApplication.exec_()) 
+0

我只想遍歷所有按鈕[沒有硬編碼buttonNames在「For循環」。因爲將來可能會添加或刪除新的按鈕]和高亮顯示(背景顏色)動態點擊一次 – user2408848 2014-09-19 09:10:19

2

確保按鈕都是組框的子組,然後使用findChildren來遍歷它們。您也可以使用QButtonGroup來幫助管理按鈕。

這裏有一個演示腳本來顯示它如何做:

from PyQt4 import QtCore, QtGui 

class Dialog(QtGui.QDialog): 
    def __init__(self): 
     QtGui.QDialog.__init__(self) 
     layout = QtGui.QVBoxLayout(self) 
     self.groupBox = QtGui.QGroupBox(self) 
     layout.addWidget(self.groupBox) 
     layout = QtGui.QVBoxLayout(self.groupBox) 
     for index in range(5): 
      button = QtGui.QPushButton('Button %d' % index, self.groupBox) 
      layout.addWidget(button) 
     self.buttonGroup = QtGui.QButtonGroup(self) 
     self.buttonGroup.buttonClicked.connect(self.handleButtonClicked) 
     self.updateButtonGroup() 

    def updateButtonGroup(self): 
     for button in self.groupBox.findChildren(QtGui.QPushButton): 
      if self.buttonGroup.id(button) < 0: 
       self.buttonGroup.addButton(button) 

    def handleButtonClicked(self, button): 
     for item in self.buttonGroup.buttons(): 
      if button is item: 
       item.setStyleSheet('background-color: orange') 
      else: 
       item.setStyleSheet('') 

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    window = Dialog() 
    window.show() 
    sys.exit(app.exec_())