2015-09-14 26 views
1

我有不同的文件(main.py和layout.py),我想從文件layout.py中更改QMainWindow的窗口(我縮短了它應該改變窗口大小的例子) 。從其他文件調用setCentralWidget

它可以從main.py正常工作,我可以從main.py文件更改窗口,但它在layout.py中沒有任何作用。

更新:我更改了文件兩個工作示例與按鈕「切換到佈局2」不起作用的問題。

main.py

import sys 
from PyQt5.QtWidgets import QAction, QApplication, QMainWindow 
from layout import Layout1, Layout2 

class MainClass(QMainWindow): 
    def __init__(self): 
    super(MainClass, self).__init__() 

    def initUI(self): 
    self.setGeometry(50, 100, 600, 500) 
    self.setWindowTitle('program') 


    self.window1Action = QAction('Window1', self) 
    self.window1Action.triggered.connect(self.window1) 
    self.window2Action = QAction('Window2', self) 
    self.window2Action.triggered.connect(self.window2) 

    self.menubar = self.menuBar() 
    menu = self.menubar.addMenu('&Menu') 
    menu.addAction(self.window1Action) 
    menu.addAction(self.window2Action) 

    self.show() 

    def window1(self): 
    wsize1 = (1200, 600) 
    self.resize(*wsize1) 
    self.form_widget = Layout1() 
    self.setCentralWidget(self.form_widget) 

    def window2(self): 
    wsize2 = (600, 500) 
    self.resize(*wsize2) 
    self.form_widget = Layout2() 
    self.setCentralWidget(self.form_widget) 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    ex = MainClass() 
    ex.initUI() 
    sys.exit(app.exec_()) 

layout.py

from PyQt5.QtWidgets import QFormLayout, QPushButton, QWidget 

class Layout1(QWidget): 

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

    self.form_layout = QFormLayout(self) 

    self.button1 = QPushButton('Button1') 
    self.form_layout.addRow('nonfunctional', self.button1) 

    self.buttonX = QPushButton('Switch to Layout2') 
    self.form_layout.addRow('Problem', self.buttonX) 
    self.buttonX.clicked.connect(self.change_layout) 

    self.setLayout(self.form_layout) 

    def change_layout(self): 
    from main import MainClass 
    self.change_window = MainClass() 
    self.change_window.window2() 


class Layout2(QWidget): 

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

    self.form_layout = QFormLayout(self) 

    self.button2 = QPushButton('Button3') 
    self.form_layout.addRow('nonfunctional', self.button2) 

    self.setLayout(self.form_layout) 

任何人都可以向我解釋什麼,我有什麼錯呢?

回答

2

您的佈局類有一個parent參數,所以使用它。你需要讓主窗口的現有實例的參考,而不是創建一個新:

def window1(self): 
     ... 
     self.form_widget = Layout1(self) 
     self.setCentralWidget(self.form_widget) 

    ...   

    def change_layout(self): 
     self.parent().window2() 
+0

謝謝你,解決了我的問題。 – maxie