【问题标题】:How to condense Python class instances?如何压缩 Python 类实例?
【发布时间】:2018-04-26 01:41:17
【问题描述】:

我正在使用 PyQt 创建一个 GUI,需要创建一个由按钮组成的周期表。波纹管是代码的一部分。每个按钮都需要 mainLayout(self) 方法中的以下代码。

class App(QMainWindow):

    def __init___(self):
        ...

    def mainLayout(self):
        Element1 = QPushButton('shortname', self)
        Element1.setToolTip('longname')
        Element1.setCheckable(True)
        Element1.resize(50, 50)
        Element1.move(x, y)
        Element1.clicked.connect(self.Element1_click)

当有 118 个按钮时,这是一个按钮的大量重复代码。我在过去制作了一个 GUI,它也遇到了同样的问题,我记得我通过创建另一个类解决了这个问题,我为每个按钮的唯一属性传递了参数。

当 LayoutElm 是一个类时,我想到了类似的东西。

LayoutElm(Element1 ,'shortname', 'longname', x, y, Element1_click)

任何想法将不胜感激。

【问题讨论】:

    标签: python string class pointers pyqt


    【解决方案1】:

    您只需要创建一个创建项目的函数:

    class App(QMainWindow):
        def __init___(self):
            ...
    
        def mainLayout(self):
            createLayoutElm('shortname', 'longname', (x, y), self.Element1_click)
            createLayoutElm('shortname1', 'longname1', (100, 100), self.Element1_click2)
            ...
    
        def createLayoutElm(self, name, tooltip, pos, callback):
            btn = QPushButton(name, self)
            btn.setToolTip(tooltip)
            btn.setCheckable(True)
            btn.resize(50, 50)
            btn.move(*pos)
            btn.clicked.connect(callback)
    

    【讨论】:

    • 这太棒了。为了让它工作,我不得不把 def createLayoutElm(self, name, tooltip, pos, callback): btn = QPushButton(name, self) btn.setToolTip(tooltip) btn.setCheckable(True) btn.resize(50, 50) btn.move(*pos) btn.clicked.connect(callback) 进入 def mainLayout(self): 方法。正因为如此,我不得不拿出自我论证。但是非常感谢!现在完美运行!
    • 您介意解释一下 *pos 的含义吗?上课有什么特别的吗?
    • @HarrisonReisinger 阅读 stackoverflow.com/questions/2921847/…
    • 哦,这很有趣,我以后一定会使用它。谢谢。
    猜你喜欢
    • 2021-05-03
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多