如何使变量在 Python(和 Qt)中的函数之外可用

Posted

技术标签:

【中文标题】如何使变量在 Python(和 Qt)中的函数之外可用【英文标题】:How do I make variables available outside of functions in Python (and Qt) 【发布时间】:2022-01-24 06:15:20 【问题描述】:

我有一个新手 Python + QT5 Designer 问题。在此处阅读大量关于在 python 中它们各自的函数之外不可用的变量的信息,但大多数示例将结果返回给被调用的函数,而不是来自另一个触发事件。我可能错过了一些东西,因为这在其他语言中很容易做到。正如您在我的示例中所看到的,这些函数是从 gui 上的按钮单击调用的,因此当单击停止按钮时 starttime 的变量需要可用。这个例子应该简单地从另一个中减去一个时间并将结果显示在 Qt5 窗口上的标签中。任何帮助将不胜感激。

import sys
from PyQt5 import QtWidgets, uic
from PyQt5.QtWidgets import*
from PyQt5.uic import loadUi
from PyQt5.QtCore import QTime, QDateTime, Qt
qtgui_file  = r"example.ui"
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtgui_file)
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self,parent=None):
        QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.pbstart.clicked.connect(self.setstarttime)
        self.pbstop.clicked.connect(self.setstoptime)
    def setstarttime(self):
        self.pbstart.setEnabled(False)
        self.pbstop.setEnabled(True)
        starttime = QTime.currentTime()
        self.lblstart.setText(starttime.toString(Qt.DefaultLocaleLongDate))
    def setstoptime(self):
        self.pbstart.setEnabled(True)
        self.pbstop.setEnabled(False)
        endtime = QTime.currentTime()
        self.lblstop.setText(endtime.toString(Qt.DefaultLocaleLongDate))
#..code in here to subtract endtime from startime stored in timediff variable
#?????
        timediff = "...dummy string as starttime is not defined in this function"
        self.lbltimediff.setText(timediff)
        
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = ExampleApp()
    window.show()
    sys.exit(app.exec_())```

【问题讨论】:

【参考方案1】:

我的建议是使用 global 关键字使变量成为全局变量。

def setstarttime(self):
    self.pbstart.setEnabled(False)
    self.pbstop.setEnabled(True)
    global starttime
    starttime = QTime.currentTime()
    self.lblstart.setText(starttime.toString(Qt.DefaultLocaleLongDate))

您只需将它们定义为类变量,如

self.starttime = datetime.datetime.min()

然后在你想要的任何函数中使用该变量。

【讨论】:

以上是关于如何使变量在 Python(和 Qt)中的函数之外可用的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中的函数之外访问函数的变量或参数?

为啥在嵌套函数之外声明一个计数器变量会使循环慢 5 倍?

如何使Qt Python中的窗口弹出自动可拉伸

如何使大量现有函数在一个类的范围内可用?

Qt5 在 Python 脚本中调用函数

Python 函数式编程装饰器以及一些相关概念简介