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

How do I make variables available outside of functions in Python (and Qt)

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

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_())```

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

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

您只需将它们定义为 class 个变量,例如

self.starttime = datetime.datetime.min()

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