2017-06-15 36 views
0

面對這樣一個有趣的情況。我有QButtonGroup,我有幾個QCheckBoxes。所有QCheckBoxes都是我想要的互相排斥,但是有一個令人不快的事實。當我想取消選中QCheckBox時,我無法做到。一個人怎麼能解決這個問題,有人會遇到類似的問題嗎?取消qbuttongroip qcheckbox

這裏我QButtonGroup:

self.group = QtGui.QButtonGroup() 
self.group.addButton(self.chk_box_1, 1) 
self.group.addButton(self.chk_box_2, 2) 

回答

0

可以完成的任務,如果你暫時停用排他性屬性,你的情況是創建一個保存最後一次按下按鈕,一個變量,如果再次按下它檢查,如果發生這種情況,我們通過取消選中該按鈕並再次激活排他性屬性來停用該屬性。

[...] 
    self.group.setExclusive(True) 
    self.btnLastChecked = None 
    group.buttonClicked.connect(self.onButtonClicked) 

def onButtonClicked(self, btn): 
    if not self.btnLastChecked: 
     self.btnLastChecked = btn 
    else: 
     if self.btnLastChecked == btn: 
      self.sender().setExclusive(False) 
      btn.setCheckState(QtCore.Qt.Unchecked) 
      self.sender().setExclusive(True) 
      self.btnLastChecked = None 
     else: 
      self.btnLastChecked = btn 

實施例:

import sys 
from PyQt4 import QtCore, QtGui 

class Widget(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     layout=QtGui.QHBoxLayout(self) 

     self.group=QtGui.QButtonGroup(self) 
     for i in range(10): 
      btn = QtGui.QCheckBox(str(i)) 
      self.group.addButton(btn, i) 
      layout.addWidget(btn) 

     self.group.setExclusive(True) 
     self.btnLastChecked = None 
     self.group.buttonClicked.connect(self.onButtonClicked) 

    def onButtonClicked(self, btn): 
     if not self.btnLastChecked: 
      self.btnLastChecked = btn 
     else: 
      if self.btnLastChecked == btn: 
       self.sender().setExclusive(False) 
       btn.setCheckState(QtCore.Qt.Unchecked) 
       self.sender().setExclusive(True) 
       self.btnLastChecked = None 
      else: 
       self.btnLastChecked = btn 


if __name__=='__main__': 
    app = QtGui.QApplication(sys.argv) 
    w = Widget() 
    w.show() 
    sys.exit(app.exec_()) 
+0

感謝。是工作! –