我有一個接口,在屏幕頂部有4個按鈕,下面有我的QFrame。我想根據按下哪個按鈕來更改QFrame中的佈局。例如,如果Button_1被按下,顯示一個TextEdit Widget,如果Button_2被按下,則顯示一個ListViewWidget。Pyside更改佈局
有沒有人有任何想法如何做到這一點? 非常感謝!
我有一個接口,在屏幕頂部有4個按鈕,下面有我的QFrame。我想根據按下哪個按鈕來更改QFrame中的佈局。例如,如果Button_1被按下,顯示一個TextEdit Widget,如果Button_2被按下,則顯示一個ListViewWidget。Pyside更改佈局
有沒有人有任何想法如何做到這一點? 非常感謝!
喜歡的東西...
myframe.layout().removeWidget(mywidget)
mywidget = QTextEdit()
myframe.layout().addWidget(myWidget)
使用QStackedLayout
來存儲您的小部件。然後,您可以更改爲setCurrentIndex
。或者,您可以使用QStackedWidget
代替您的QFrame
。
一個簡單的例子:
import sys
from PySide import QtGui
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.textEdit = QtGui.QTextEdit('Text Edit')
self.listWidget = QtGui.QListWidget()
self.listWidget.addItem('List Widget')
self.label = QtGui.QLabel('Label')
self.stackedLayout = QtGui.QStackedLayout()
self.stackedLayout.addWidget(self.textEdit)
self.stackedLayout.addWidget(self.listWidget)
self.stackedLayout.addWidget(self.label)
self.frame = QtGui.QFrame()
self.frame.setLayout(self.stackedLayout)
self.button1 = QtGui.QPushButton('Text Edit')
self.button1.clicked.connect(lambda: self.stackedLayout.setCurrentIndex(0))
self.button2 = QtGui.QPushButton('List Widget')
self.button2.clicked.connect(lambda: self.stackedLayout.setCurrentIndex(1))
self.button3 = QtGui.QPushButton('Label')
self.button3.clicked.connect(lambda: self.stackedLayout.setCurrentIndex(2))
buttonLayout = QtGui.QHBoxLayout()
buttonLayout.addWidget(self.button1)
buttonLayout.addWidget(self.button2)
buttonLayout.addWidget(self.button3)
layout = QtGui.QVBoxLayout(self)
layout.addLayout(buttonLayout)
layout.addWidget(self.frame)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
非常感謝您! 您是否還知道如何防止每次按下按鈕時創建多個小部件? 例如,我創建了一個標籤,每次按button_1時都會創建另一個標籤。 – user1960118
@ user1960118:取決於您的代碼。 – Avaris