2011-08-06 56 views
3

你好的PyQt/PySide專家,的PyQt/PySide的QMainWindow - 視圖之間切換

我是一個新手,都PyQt的/ PySide和桌面應用程序開發(我是一個Web開發人員)。

我有一個關於你應該如何在一個PyQt的/ PySide應用程序的不同視圖間導航的問題。

假設我的應用程序具有「TEST1」(默認)和「TEST2」視圖(即像網頁應用程序中的頁面),並且我想通過單擊相應的工具欄項目在它們之間切換。

我以爲我可以使用QMainWindow.setCentralWidget()來設置每次單擊工具欄按鈕時請求的視圖,但這是一種正常的方式來在PyQt/PySide中的不同視圖之間導航?

供您參考,我會發佈一個示例代碼來說明上面:

#!/usr/bin/env python 

import sys 
from PySide import QtCore 
from PySide.QtCore import * 
from PySide.QtGui import * 

class MainWindow(QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 

     # toolbar action 1 
     self.test1_action = QAction(QIcon('icons/test1.png'), 'Test 1', self) 
     self.test1_action.triggered.connect(self.show_test1_view) 

     # toolbar action 2 
     self.test2_action = QAction(QIcon('icons/test2.png'), 'Test 2', self) 
     self.test2_action.triggered.connect(self.show_test2_view) 

     # create toolbar 
     self.toolbar = self.addToolBar('Actions') 
     self.toolbar.addAction(self.test1_action) 
     self.toolbar.addAction(self.test2_action) 

     # default view is test1, so call the method to set the central widget to "test1" view. 
     self.show_test1_view() 

    # switch to "test1" view - just a simple label here. 
    def show_test1_view(self): 
     self.test1_view = QLabel('TEST1 VIEW') 
     self.setCentralWidget(self.test1_view) 

    # switch to "test2" view - just a simple label here. 
    def show_test2_view(self): 
     self.test2_view = QLabel('TEST2 VIEW') 
     self.setCentralWidget(self.test2_view) 

app = QApplication(sys.argv) 

window = MainWindow() 
window.show() 

app.exec_() 
sys.exit() 

預先感謝您...!

回答

4

stackedwidget可能會訣竅

+0

您好,非常感謝您指出!我已經看了一下,它確實對我的目的看起來不錯。但是對於像我這樣的應用使用StackedWidget事實上的標準?你通常會在像我這樣的情況下使用什麼?謝謝! – Sacki

+0

@Sacki:我使用StackedWidget,我不知道這是否是一個任何形式的「標準」,但它必須存在是有原因的。我認爲,它存在的理由是在需要的時候使用... :) – dugres

+0

您好,感謝您的回覆,我很抱歉,我花了很長要回你。我一定會試一試。再次感謝! – Sacki