如何在 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()
然后在您想要的任何函数中使用该变量。
我有一个新手 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()
然后在您想要的任何函数中使用该变量。