如何使变量在 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)中的函数之外可用的主要内容,如果未能解决你的问题,请参考以下文章