【问题标题】:Programmatically calling toggle on a checkbox breaks gui in pyqt5以编程方式调用复选框上的切换会破坏 pyqt5 中的 gui
【发布时间】:2017-08-11 23:42:38
【问题描述】:

我正在创建一个设置小部件,用户可以在其中单击复选框来选择他们的首选设置。我想要一个“放弃更改”按钮,按下该按钮会将复选框选择恢复为上次保存。

为此,我已将上次保存的复选框的状态保存在字典中,当调用丢弃更改时,它将在字典中循环,如果复选框的值为 True,我将切换,如果为 False我会解开。这样做时,gui 中断并且复选框消失。

我已经尝试过,发现如果我调用 x.setChecked(True) 一次,它会起作用,但如果在另一个复选框上再次调用 toggle,它会中断。任何帮助将不胜感激!

class GlobalSettings(QtWidgets.QWidget, Ui_Form):

    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.parent = parent
        self.setupUi(self)
        self.descList = [] #list that holds tire description elements in order
        self.metaHeader = []
        self.savedSettings = {}
        self.tempSettings = {}



    def __guiSetup__(self):
        self.metaCustomLine.setReadOnly(True)
        self.metaConstructionCode.toggle()

        self.tempSettings[self.metaCommandFileName] = False
        self.tempSettings[self.metaConstructionCode] = True
        self.tempSettings[self.metaDescription] = False
        self.tempSettings[self.metaDiameter] = False
        self.tempSettings[self.metaManufacturerDesc] = False
        self.tempSettings[self.metaRimDescription] = False
        self.tempSettings[self.metaRimMaterialDesc] = False
        self.tempSettings[self.metaSerialNumber] = False
        self.tempSettings[self.metaSize] = False
        self.tempSettings[self.metaTestTypeDesc] = False
        self.tempSettings[self.metaTestTypeID] = False
        self.tempSettings[self.metaTitle] = False
        self.tempSettings[self.metaWidth] = False

        for x in self.tempSettings:
            self.savedSettings[x] = self.tempSettings[x]


    def discardChanges(self):
        for x in self.savedSettings:
            if self.savedSettings[x]:
                x.setChecked(True)
            else:
                x.setChecked(False)


    def refresh(self):
        return 1

【问题讨论】:

    标签: python checkbox pyqt pyqt5


    【解决方案1】:

    在循环中处理信号时,似乎需要调用 QtWidgets.QApplication.processEvents()。

    def discardChanges(self):
        for x in self.savedSettings:
            if self.savedSettings[x]:
                x.setChecked(True)
                QtWidgets.QApplication.processEvents()
            else:
                x.setChecked(False)
                QtWidgets.QApplication.processEvents()
    

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2016-11-05
      • 2013-12-18
      • 2010-12-07
      相关资源
      最近更新 更多