gpt4 book ai didi

python - 从其他文件调用 setCentralWidget

转载 作者:行者123 更新时间:2023-12-01 04:29:35 25 4
gpt4 key购买 nike

我有不同的文件(main.py和layout.py),我想从文件layout.py更改QMainWindow的窗口(我已经缩短了它应该更改窗口大小的示例)。

它在 main.py 中工作正常,我可以从文件 main.py 更改窗口,但它在 layout.py 中没有任何效果。

更新:我更改了文件两个工作示例,但存在“切换到布局 2”按钮不起作用的问题。

ma​​in.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_())

布局.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)

有人可以向我解释一下我做错了什么吗?

最佳答案

您的布局类有一个 parent 参数,因此请使用它。您需要获取对主窗口现有实例的引用,而不是创建一个新实例:

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

...

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

关于python - 从其他文件调用 setCentralWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32559791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com