首页 > 解决方案 > 如何用 Qt5 python 中的按钮替换全局变量?

问题描述

我在使用 Qt5 中的按钮替换全局变量的值时遇到问题。

我对 Python 比较陌生,我确信我错过了一些微不足道的东西,但我找不到解决方案。

下面是一个 GUI 示例,其中“向下移动”按钮将 QLineEdit 的位置移向底部。问题是我只能将它移动一次到一个固定的新位置。我无法通过多次按下按钮继续向下移动它,因为我无法不断更新全局变量 YY 的值。事实上,当按下按钮后打印 YY 的值时,它总是显示相同的值。

从函数返回新的 YY 值并不能解决问题,因为我无法通过连接信号将新值与变量相关联。

提前致谢!

    import sys
    import PyQt5.QtCore
    from PyQt5.QtCore import Qt
    import PyQt5.QtWidgets as qt5
    from PyQt5.QtWidgets import QApplication, QVBoxLayout, QLabel, QSlider, QLineEdit, QWidget, QLCDNumber, QSlider, QVBoxLayout
    from PyQt5.QtGui import QIcon
    
    XX = 800
    YY = 80

    def MoveDown(x):
        newYY = x + 60
        qle.move(XX, newYY)
        return UpdateYY(newYY)

    def UpdateYY(y):
        YY = y
        print(YY)

    #############################################

    app =  PyQt5.QtWidgets.QApplication(sys.argv)

    w = PyQt5.QtWidgets.QMainWindow()
    w.resize(1280, 480)
    w.move(300, 300)

    MainWindow = PyQt5.QtWidgets.QWidget()

    vboxlayout = qt5.QVBoxLayout()
    hboxlayout = qt5.QHBoxLayout()
    vboxlayout.addLayout(hboxlayout)
    MainWindow.setLayout(vboxlayout)

    qle = QLineEdit(MainWindow)
    qle.move(XX, YY)
    MoveButton = qt5.QPushButton("Move down")
    MoveButton.clicked.connect(lambda: MoveDown(YY))
    vboxlayout.addWidget(MoveButton)

    w.setCentralWidget(MainWindow)

    w.show()

    app.exec()

标签: pythonglobal-variablesqt5

解决方案


您需要澄清它是一个全局变量。

您可以通过添加来做到这一点

def UpdateYY(y):
        global YY # This will tell python it should use the global scope of YY
        YY = y
        print(YY)

推荐阅读