我想在代码中编写代码,该代码将创建一个输出窗口,该窗口显示启动窗口或执行程序所花费的时间,而不考虑创建输出窗口所花费的时间:
例如,让我们看一个由我们将检查的库创建的窗口,以及创建由库创建的用于输出pyqt5
的窗口的程序本身。tkinter
如果我在一个单独的文件中运行输出程序,那么它将正常工作,但如果我想将它放在我想要检查的程序本身中,那么它就不起作用。
我试图将输出代码从程序中分离出来,以使用一些分隔符(从#/*
到#*/
)作为注释进行检查,并在读取文件时跳过放置在分隔符中的代码。
输出代码:
from tkinter import *
import timeit
root = Tk()
root.geometry('200x100')
with open('test.py', 'r') as f:
code = f.read()
time = timeit.timeit(code, number = 1)
text = '[Program finished in %d %s]' %\
(time * 1000, 'ms') if time < 1 else (time, 's') if 1 < time < 60\
else (time / 60, 'm') if 60 < time < 3600 else (time / 3600, 'h')
Label(text = text).place(x = 10, y = 10)
root.mainloop()
我已经用输出代码检查过的代码:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(450, 450)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
#/* < --- начало
from tkinter import *
import timeit
root = Tk()
root.geometry('200x100')
with open('test.py', 'r') as f:
code = f.read()
code = code.replace(code[code.find('#/*') : code.find('#*/') + 3], '') # < --- то что я попробовал сделать
time = timeit.timeit(code, number = 1)
text = '[Program finished in %d %s]' %\
(time * 1000, 'ms') if time < 1 else (time, 's') if 1 < time < 60\
else (time / 60, 'm') if 60 < time < 3600 else (time / 3600, 'h')
Label(text = text).place(x = 10, y = 10)
root.mainloop()
#*/ < --- конец код вывода помесчёный в код который проверяем
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
理论上应该如何:
我在这里看到了很多问题。
它不能使用看起来与真实标记完全相同的标记。否则,它会自己找到它们,而不是你指出它们的地方。
该条件
if __name__ == "__main__":
将阻止它下面的代码从timeit
. 有__name__
平等的"timeit"
。该团队
sys.exit(...)
将完全完成该计划。所以窗口永远不会随着时间的推移而弹出。好吧,下面的代码必须放在括号中。否则
else
,它将引用的不是替换选项,而是字符串的内容。并且在超过一秒的时间内,将不会执行格式化替换。好吧,总的来说,我不明白整个想法的含义。