简化我的代码,其他函数使用一个要创建的函数

问题描述 投票:-1回答:2

我有这个代码:

class Main(QWidget):
    def __init__(self):
        super().__init__()
        self.init_gui()

    def init_gui(self):
        self.layout_main = QVBoxLayout()
        self.setLayout(self.layout_main)

        self.first()
        self.second()

        self.showMaximized()

    def scroll_areas(self):
        scroll_area = QScrollArea(self)
        widget = QWidget()
        layout = QVBoxLayout()

        scroll_area.setWidgetResizable(True)
        scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        scroll_area.setFixedSize(200, 200)
        widget.setLayout(layout)
        scroll_area.setWidget(widget)
        # self.layout_main.addLayout(layout)

    def first(self):
        title = QLabel("<h1>First</h1>")
        title.setTextFormat(Qt.RichText)


    def second(self):
        title = QLabel("<h1>Second</h1>")
        title.setTextFormat(Qt.RichText)

我想在function scroll_areasfunctions firstsecond然后我想要这样的东西:

add QLabel title to scroll_areas's layout

我最后一件事是将scroll_areas的布局添加到主布局,我在scroll_areas中评论了这一行,因为它必须在firstsecond的最后一行。

谢谢!

python-3.x pyqt5
2个回答
0
投票

结果,您可以通过执行代码来完成。

Pre请你写英文并更清楚地解释你的问题。我建议你再读一遍stackoverflow的规则。

我们来解释你的代码吧。

您在第一种和第二种方法中制作标题对象。但它们属于局部变量。所以我们不能像它们那样引用它。所以我将self.附加到变量上。

首先,执行firstsecond方法,并创建两个标题对象。(如果在self.scroll_areas之前调用这些方法,则会出错。)

无论如何,你尝试从各个角度来做你的代码。我建议你一遍又一遍地阅读参考Qt。你仍然是新指挥,但请更清楚地写下你的问题。这个建议适合你。

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class Main(QWidget):
    def __init__(self):
        super().__init__()
        self.init_gui()

    def init_gui(self):
        self.layout_main = QVBoxLayout()
        self.setLayout(self.layout_main)

        self.first()
        self.second()
        self.scroll_areas()
        self.showMaximized()

    def scroll_areas(self):
        scroll_area = QScrollArea(self)
        widget = QWidget()
        layout = QVBoxLayout()
        layout.addWidget(self.first_title)
        layout.addWidget(self.second_title)
        scroll_area.setWidgetResizable(True)
        scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        scroll_area.setFixedSize(200, 200)
        widget.setLayout(layout)
        scroll_area.setWidget(widget)
        # self.layout_main.addLayout(layout)

    def first(self):
        self.first_title = QLabel("<h1>First</h1>")
        self.first_title.setTextFormat(Qt.RichText)

    def second(self):
        self.second_title = QLabel("<h1>Second</h1>")
        self.second_title.setTextFormat(Qt.RichText)
def main():
    app = QApplication([])
    window = Main()
    window.show()
    sys.exit(app.exec_())
if __name__ == "__main__":
    main()

0
投票

试试吧:

class Main(QWidget):
    def __init__(self):
        super().__init__()
        self.init_gui()

    def init_gui(self):
        self.layout_main = QVBoxLayout()
        self.setLayout(self.layout_main)

        self.scroll_areas()                                          # +++

        self.first()
        self.second()

        self.showMaximized()

    def scroll_areas(self):
        scroll_area = QScrollArea(self)
        widget = QWidget()
        self.layout = QVBoxLayout()

        scroll_area.setWidgetResizable(True)
        scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        scroll_area.setFixedSize(200, 200)
        widget.setLayout(self.layout)
        scroll_area.setWidget(widget)

        # self.layout_main.addLayout(layout)
        self.layout_main.addWidget(scroll_area)                       # +++

    def first(self):
        title = QLabel("<h1>First</h1>")
        title.setTextFormat(Qt.RichText)
        self.layout.addWidget(title)                                  # +++

    def second(self):
        title = QLabel("<h1>Second</h1>")
        title.setTextFormat(Qt.RichText)
        self.layout.addWidget(title)                                  # +++

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.