【问题标题】:I want to hide widget at the start of program我想在程序开始时隐藏小部件
【发布时间】:2020-11-30 18:22:36
【问题描述】:

知道,我尝试使用 pyqt 制作 GUI。 我想在程序开始时隐藏一些小部件,并在我选择 Combobox 时显示。 可以在程序开始时隐藏一些小部件。但是,当我选择 Combobox 时,不可能显示特定的小部件。你能给我一些解决这个问题的建议吗?

class MyForm(QtGui.QWidget):
def __init__(self):
    QtGui.QWidget.__init__(self)
    self.ui = Ui_MainWindow()
    self.ui.setupUi(self)
    self.ui.oneLayerWidget.setVisible(False)
    self.ui.twoLayerWidget.setVisible(False)
    self.ui.layTypeComboBox.clear()
    self.ui.layTypeComboBox.addItems(["Original Layer", "Boolean Layer"])
    self.ui.layTypeComboBox.currentIndexChanged.connect(self.layTypeSelEvent)

def layTypeSelEvent(self):
    layType = str(self.ui.layTypeComboBox.currentText())
    if layType == "Original Layer":
        self.ui.twoLayerWidget.setVisible(False)
        self.ui.oneLayerWidget.setVisible(True)
    elif layType == "Boolean Layer":
        self.ui.oneLayerWidget.setVisible(False)
        self.ui.twoLayerWidget.setVisible(True)

【问题讨论】:

    标签: python pyqt pyqt4 qt-designer


    【解决方案1】:

    如果我理解正确,你想要这样的东西来隐藏你的小部件 self.ui.twoLayerWidget.hide() 并显示你的小部件 self.ui.twoLayerWidget.show()

    它也类似于 setVisible 看到这个link

    或者也许你可以考虑使用stackedWidget,你可以通过改变索引来改变要显示的小部件

    self.ui.stackedWidget.setCurrentIndex(1)
    

    【讨论】:

    • 是的,self.ui.twoLayerWidget.hide() 和 self.ui.twoLayerWidget.show() 也像 setVisible 一样工作。我想要做的是当我更改组合框(layTypeCombobox)时隐藏和显示小部件。根据我的代码,当我选择组合框的原始层时,必须隐藏 twoLayerWidget 而必须显示 oneLayerWidget。但是,它不起作用。始终隐藏两个小部件。我怀疑 def __init__(self): 中的 self.ui.oneLayerWidget.setVisible(False) 和 self.ui.twoLayerWidget.setVisible(False) 是否会导致这个问题。
    • 也许可以考虑为您的情况使用堆叠小部件?
    • 是的!堆叠的小部件可能是我想做的。
    • 如果您认为这是适合您的解决方案,请标记它:)
    【解决方案2】:
    class MyForm(QtGui.QWidget):
        def __init__(self):
            QtGui.QWidget.__init__(self)
            self.ui = Ui_MainWindow()
            self.ui.setupUi(self)
            self.ui.oneLayerWidget.setVisible(Ture)
            self.ui.twoLayerWidget.setVisible(False)
            self.ui.layTypeComboBox.clear()
            self.ui.layTypeComboBox.addItems(["Original Layer", "Boolean Layer"])
            self.ui.layTypeComboBox.currentIndexChanged.connect(self.layTypeSelEvent)
    
        def layTypeSelEvent(self, index):
            if index == 0:
                self.ui.twoLayerWidget.setVisible(False)
                self.ui.oneLayerWidget.setVisible(True)
            elif index == 1:
                self.ui.oneLayerWidget.setVisible(False)
                self.ui.twoLayerWidget.setVisible(True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      相关资源
      最近更新 更多