gpt4 book ai didi

python - PyQt - 如何将单独的 UI 小部件添加到 QMainWindow

转载 作者:IT老高 更新时间:2023-10-28 20:50:49 27 4
gpt4 key购买 nike

我最近才开始编程,尤其是 Python (PyQt)。我有我的主要 QMainWindow 类。但我想将它与 UI 小部件分开,以便所有窗口的东西(菜单、工具栏、常用按钮)都在 QMainWindow 中,但所有程序/UI 特定的小部件(按钮、组合框、图像、复选框等) .) 在单独的 QWidget 类中。但我不确定我这样做是否正确。

  1. 我的布局有问题 - 一些不可见的东西覆盖了菜单,因此鼠标无法点击它们,我想我没有正确地将我的 UI 小部件添加到主窗口

我是这样做的:

class MyMainWindow(QMainWindow):
def __init__(self, parent = None):
super(MyMainWindow, self).__init__(parent)

self.main_widget = QWidget(self)
...
self.form_widget = FormWidget(self)
#This is my UI widget

self.main_layout = QVBoxLayout(self.main_widget)
self.main_layout.sizeConstraint = QLayout.SetDefaultConstraint
self.main_layout.addWidget(self.form_widget.main_widget)
#form_widget has its own main_widget where I put all other widgets onto

self.main_widget.setLayout(self.main_layout)
self.setCentralWidget(self.main_widget)
  1. 我见过其他 Python 程序,其中应用程序被分解为许多小代码文件(据我了解,主类中的所有内容都是不可读或无法管理的)。

您对将代码分成小块有什么建议?怎么做比较好?或者对于 UI,它可以都在一个大的地方?我应该把 UI 代码/类分成单独的文件吗?

谢谢。

[已解决]

我发现我的错误 - 我从 UI 小部件类中删除了 main_widget(现在所有 UI 小部件都直接放在 UI 类小部件本身上)并且只这样做:

self.main_layout.addWidget(self.form_widget)

菜单不再有问题

最佳答案

您正在寻找这样的东西吗?我不太确定你的 main_widget 是什么

from PyQt4.QtCore import *
from PyQt4.QtGui import *

import sys

class MyMainWindow(QMainWindow):

def __init__(self, parent=None):

super(MyMainWindow, self).__init__(parent)
self.form_widget = FormWidget(self)
self.setCentralWidget(self.form_widget)


class FormWidget(QWidget):

def __init__(self, parent):
super(FormWidget, self).__init__(parent)
self.layout = QVBoxLayout(self)

self.button1 = QPushButton("Button 1")
self.layout.addWidget(self.button1)

self.button2 = QPushButton("Button 2")
self.layout.addWidget(self.button2)

self.setLayout(self.layout)

app = QApplication([])
foo = MyMainWindow()
foo.show()
sys.exit(app.exec_())

关于python - PyQt - 如何将单独的 UI 小部件添加到 QMainWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8814452/

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