Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按请求切换窗口小部件可见性_Python_Pyqt_Qcombobox_Qdialog - Fatal编程技术网

Python 如何按请求切换窗口小部件可见性

Python 如何按请求切换窗口小部件可见性,python,pyqt,qcombobox,qdialog,Python,Pyqt,Qcombobox,Qdialog,下面的代码创建了一个包含三行小部件的对话框窗口: 一个组合,lineEdit和dateEdit。当组合框显示“Show LineEdit”时,我希望LineEdit可见,而dateEdit隐藏。选择“显示日期编辑”后,我想隐藏LineEdit并显示DateEdit。如何实现 策略是创建一个字典,其中包含一个组合框和值作为键​​相应的其他小部件的字典,然后使用可返回文本或数字的激活方法 from PyQt4 import QtGui app = QtGui.QApplication([])

下面的代码创建了一个包含三行小部件的对话框窗口: 一个组合,lineEdit和dateEdit。当
组合框
显示“Show LineEdit”时,我希望
LineEdit
可见,而
dateEdit
隐藏。选择“显示日期编辑”后,我想隐藏
LineEdit
并显示
DateEdit
。如何实现


策略是创建一个字典,其中包含一个组合框和值作为键​​相应的其他小部件的字典,然后使用可返回文本或数字的激活方法

from PyQt4 import QtGui

app = QtGui.QApplication([])


class Dialog(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setLayout(QtGui.QVBoxLayout())

        self.widgets = {}

        for i in range(3):
            row = QtGui.QHBoxLayout()
            combo = QtGui.QComboBox()
            combo.addItems(['Show LineEdit', 'Show DateEdit'])
            combo.activated[str].connect(self.activated)
            row.addWidget(combo)

            lineEdit = QtGui.QLineEdit()
            dateEdit = QtGui.QDateEdit()

            self.widgets[combo] = [lineEdit, dateEdit]

            self.changeWidget(combo.currentText(), lineEdit, dateEdit)
            row.addWidget(lineEdit)
            row.addWidget(dateEdit)
            self.layout().insertLayout(i, row)

    def activated(self, text):
        linedit, dateEdit = self.widgets[self.sender()]
        self.changeWidget(text, linedit, dateEdit)

    def changeWidget(self, text, linedit, dateEdit):
        if text == 'Show LineEdit':
            linedit.setVisible(True)
            dateEdit.setVisible(False)
        elif text == 'Show DateEdit':
            linedit.setVisible(False)
            dateEdit.setVisible(True)


panel = Dialog()
panel.show()
app.exec_()

灵感来源于上面发布的eyllanesc答案,但没有字典

from PyQt4 import QtGui
app = QtGui.QApplication([])

class Dialog(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setLayout(QtGui.QVBoxLayout())

        for i in range(3):
            row = QtGui.QHBoxLayout()
            combo = QtGui.QComboBox()
            combo.addItems(['Show LineEdit', 'Show DateEdit'])
            combo.activated[str].connect(self.activated)
            row.addWidget(combo)

            combo.lineEdit = QtGui.QLineEdit()
            combo.dateEdit = QtGui.QDateEdit()

            row.addWidget(combo.lineEdit)
            row.addWidget(combo.dateEdit)
            self.layout().insertLayout(i, row)

    def activated(self, title):
        combo = self.sender()
        if title == 'Show LineEdit':
            combo.lineEdit.setVisible(True)
            combo.dateEdit.setVisible(False)
        else:
            combo.lineEdit.setVisible(False)
            combo.dateEdit.setVisible(True)

panel = Dialog()
panel.show()
app.exec_()
from PyQt4 import QtGui
app = QtGui.QApplication([])

class Dialog(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setLayout(QtGui.QVBoxLayout())

        for i in range(3):
            row = QtGui.QHBoxLayout()
            combo = QtGui.QComboBox()
            combo.addItems(['Show LineEdit', 'Show DateEdit'])
            combo.activated[str].connect(self.activated)
            row.addWidget(combo)

            combo.lineEdit = QtGui.QLineEdit()
            combo.dateEdit = QtGui.QDateEdit()

            row.addWidget(combo.lineEdit)
            row.addWidget(combo.dateEdit)
            self.layout().insertLayout(i, row)

    def activated(self, title):
        combo = self.sender()
        if title == 'Show LineEdit':
            combo.lineEdit.setVisible(True)
            combo.dateEdit.setVisible(False)
        else:
            combo.lineEdit.setVisible(False)
            combo.dateEdit.setVisible(True)

panel = Dialog()
panel.show()
app.exec_()