派克特,布局.addItem不返回引用

2024-04-26 11:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我偶然发现PyQt5有问题。 在对水平框布局进行子类化并用三个小部件(一个标签、一个复选框和一个滑块)填充之后,我将这个布局的一个实例添加到我的主窗口应用程序中。在以后的应用程序中,我需要访问滑块的值,它现在不起作用。 其引用存储在自身滑块1不会有。因此,这个单\u滑块的属性,特别是具有PyQt5属性的模块化滑块滑块.值()不可接近。 我确信逻辑上有问题,但我无法理解。 非常感谢您的帮助。你知道吗

干杯, 宾夕法尼亚州

class single_slider(QHBoxLayout):

    def __init__(self):
        QHBoxLayout.__init__(self)
        self.label = self.addWidget(QCheckBox(), 1)
        self.cbox = self.addWidget(QLabel(), 1)
        self.slider = self.addWidget(QSlider(orientation=Qt.Horizontal), 5)

class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()
        self.setCentralWidget(QWidget(self))
        self.grid = QGridLayout()
        self.slider_1 = self.grid.addItem(single_slider())
        print(self.slider_1)
        self.centralWidget().setLayout(self.grid)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyApp()
    win.show()
    ret = app.exec_()
    sys.exit(ret)

Tags: self应用程序属性initdef布局myapppyqt5
1条回答
网友
1楼 · 发布于 2024-04-26 11:19:55

addItem()方法不返回任何值,addWidget()方法也不返回任何值,您要做的是在前面创建对象,然后用这些方法分配它们:

class single_slider(QHBoxLayout):
    def __init__(self):
        QHBoxLayout.__init__(self)
        self.cbox = QCheckBox()
        self.label = QLabel("label")
        self.slider = QSlider(orientation=Qt.Horizontal)

        self.addWidget(self.cbox)
        self.addWidget(self.label)
        self.addWidget(self.slider, 5)

class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setCentralWidget(QWidget(self))
        self.grid = QGridLayout()
        self.slider_1 = single_slider()
        self.grid.addItem(self.slider_1)
        self.slider_1.slider.valueChanged.connect(lambda val: print(val))
        self.centralWidget().setLayout(self.grid)

相关问题 更多 >