我有一個包含QGroupBox的QDialog,其中inturn包含一些QPushButton。我想區分被點擊的QPushButton和所有剩餘的QPushButton的背景顏色。如何使用pyqgis來實現這一點?如何迭代QPushButton
2
A
回答
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_())
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_())
相關問題
- 1. 如何旋轉QPushButton?
- 2. 如何迭代使用迭代器
- 3. 如何迭代multi_index
- 4. 如何迭代int?
- 5. 如何迭代div?
- 6. 如何迭代TextBox?
- 7. 如何迭代fixnum
- 8. 如何迭代DOM?
- 9. 如何通過點擊QPushbutton
- 10. 如何禁用默認qpushbutton
- 11. 如何迭代列表?
- 12. 如何迭代javascript對象?
- 13. 如何迭代類成員?
- 14. 如何使用迭代器?
- 15. 如何迭代某個值?
- 16. 如何迭代此地圖?
- 17. 如何迭代的ArrayList
- 18. 如何克隆迭代器?
- 19. 如何停止迭代
- 20. 如何迭代DOM樹?
- 21. 如何迭代延遲
- 22. 如何迭代元組項
- 23. 如何從一個迭代
- 24. 如何迭代k-ary樹?
- 25. 如何迭代Perl PDL piddle?
- 26. Jersey如何迭代參數?
- 27. Julia:如何迭代頻道
- 28. 如何迭代guzzle響應
- 29. 如何迭代JSON結構?
- 30. 如何迭代flashvars?(Actionscript)
我只想遍歷所有按鈕[沒有硬編碼buttonNames在「For循環」。因爲將來可能會添加或刪除新的按鈕]和高亮顯示(背景顏色)動態點擊一次 – user2408848 2014-09-19 09:10:19