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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简化我的代码,其他函数使用一个要创建的函数相关的知识,希望对你有一定的参考价值。

我有这个代码:

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的最后一行。

谢谢!

答案

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

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()
另一答案

试试吧:

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

以上是关于简化我的代码,其他函数使用一个要创建的函数的主要内容,如果未能解决你的问题,请参考以下文章

使用调用自定义 tableview 单元格的函数简化 tableview 代码

c++ 函数章节总结

创建片段而不从 java 代码实例化它

仅在一个片段中隐藏状态栏并在其他片段中显示

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情