我對某些後處理使用QTabWidget。 最初,該選項卡的內容是一個打開txt文件的按鈕。點擊該按鈕後,選項卡的內容會發生變化,並根據txt文件中的數據繪製圖表。此外,還有一個關閉該圖的按鈕。PySide - 如何使用QStackedWidget關閉窗口小部件後重置CentralWidget
使用QStackedWidget時,「openFileWidget」是一個CentralWidget,它在打開txt文件後被替換爲「newWindow」小部件。如果關閉「newWindow」小部件,我會回到(空)選項卡。 如果我想讓「openFileWidget」重新出現,那麼最好的方法是什麼?當newWindow關閉時,是否仍然需要使用takeAt
?
import os, sys
from PySide import QtCore, QtGui
class MainStartTabWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MainStartTabWindow, self).__init__(parent)
tabWidget = QtGui.QTabWidget()
tabWidget.addTab(tab1Tab(), self.tr("tab 1"))
mainLayout = QtGui.QVBoxLayout()
mainLayout.addWidget(tabWidget)
self.setLayout(mainLayout)
class tab1Tab(QtGui.QMainWindow):
def __init__(self, parent=None):
super(tab1Tab, self).__init__(parent)
self.initTab1Content()
def initTab1Content(self):
self.centralOpenFile = QtGui.QStackedWidget()
self.setCentralWidget(self.centralOpenFile)
widgetOpenFile = openFileWidget(self)
widgetOpenFile.openFileButton.clicked.connect(self.setOpenFile)
widgetOpenFile.openFileButton.clicked.connect(self.FileOpened)
self.centralOpenFile.addWidget(widgetOpenFile)
def FileOpened(self):
FileOpened_widget = newWindow(self.path)
self.centralOpenFile.addWidget(FileOpened_widget)
self.centralOpenFile.setCurrentWidget(FileOpened_widget)
def setOpenFile(self):
options = QtGui.QFileDialog.Options()
fileChoice = "txt (*.txt)"
self.path, filtr = QtGui.QFileDialog.getOpenFileName(self, "Open file", "", fileChoice, "", options)
return self.path
class openFileWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(openFileWidget, self).__init__(parent)
self.openFileButton = QtGui.QPushButton("click to open")
self.openFileButton.setFixedSize(150,150)
layoutNoFileYet = QtGui.QGridLayout()
layoutNoFileYet.addWidget(self.openFileButton, 1, 1)
self.setLayout(layoutNoFileYet)
class newWindow(QtGui.QMainWindow):
def __init__(self, PathToPlanFile, parent=None):
super(newWindow, self).__init__(parent)
self.createFrameUI()
def createFrameUI(self):
self.frameUI = QtGui.QWidget()
self.buttonClose = QtGui.QPushButton("close")
self.buttonClose.clicked.connect(self.close)
self.label = QtGui.QLabel("plot based on openend file")
layoutFileLoaded = QtGui.QGridLayout()
layoutFileLoaded.addWidget(self.buttonClose, 1, 1)
layoutFileLoaded.addWidget(self.label, 2, 1)
self.frameUI.setLayout(layoutFileLoaded)
self.setCentralWidget(self.frameUI)
def main():
app = QtGui.QApplication(sys.argv)
testPlot = MainStartTabWindow()
testPlot.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
非常感謝您的完整答案和詳細的幫助Justin! 確實,我的方法可能過於複雜。但我想要實現的是具有3-4個選項卡的應用程序,其中每個選項卡都有其自己的功能。所以基本上每個選項卡都是具有不同功能的主窗口,並且我希望每次重新加載某些數據時都能夠(重新)使用給定的選項卡。 這就是爲什麼我開始與QStackedWidgets。 – LievenB
我編輯了答案。如果是這種情況,那麼不要提供關閉按鈕。只需清除數據。如果你關閉了,那麼每次讀入文件時都必須重新創建這個小部件。如果你關閉它,然後存儲你讀入的數據,那麼你可以根據需要重新加載數據。嘗試嵌套在DisplayWidget內部更改的項目。 – HashSplat
太好了,非常感謝您的完整解釋! – LievenB