请问在Python程序运行时有没有让在屏幕上给个提示的方法
本帖最后由 xue11 于 2020-6-11 15:42 编辑问题:请问在Python程序运行时有没有让在屏幕上方给个提示,表示程序开始、结束?
或者有没有相关的模块?
想提升程序运行的观看感知
非常感谢! 本帖最后由 java2python 于 2020-6-15 00:43 编辑
写代码,其实每一步都会错,可以一步一步来:
比如你先加一个文本框,放在按钮的右边,先做到这一步,然后执行一下看看,有没有问题
然后,再把这个假的进度表示代码,填到你的程序中,这是假的,和你想运行的东西,没关联,看看能不能表示进度
最后才是把你要完成的动作,和进度关联起来。
进度表示GUI例子代码:
import time
import threading
from tkinter import *
def update_progress_bar():
for percent in range(1, 101):
inputload1.set(str(percent)+"/100")
time.sleep(0.1)
def run():
th = threading.Thread(target=update_progress_bar)
th.setDaemon(True)
th.start()
top = Tk()
top.title('Progress Bar')
top.geometry('800x500+290+100')
top.resizable(False, False)
top.config(bg='#535353')
# 进度条
inputload1 = StringVar()
entry_process = Entry(top, show=None,width=6,textvariable = inputload1)
entry_process.place(x=510,y=100)
# 按钮
button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
button_start.place(relx=0.45, rely=0.5, anchor=CENTER)
top.mainloop()
假如你的代码是这样:
from tkinter import *
limit = 1000000000
mili_limit = limit//1000
def heavy():
for i in range(limit):
#do_something()
b = (i*100-300)//1000
#if(i%mili_limit == 0):
# process = str(i)+"/"+str(limit)
top = Tk()
top.title('Heavy task')
top.geometry('500x300+290+100')
top.resizable(False, False)
top.config(bg='#ffffff')
# 按钮
button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=heavy, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
button_start.place(relx=0.45, rely=0.5, anchor=CENTER)
top.mainloop()
那么结合后,能表示执行进度的代码就是这样(你最好有文件比较器,看看两个文件哪里做了修改):
import threading
from tkinter import *
limit = 1000000000
mili_limit = limit//1000
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def heavy():
for i in range(limit):
#do_something()
b = (i*100-300)//1000
if(i%mili_limit == 0):
inputload1.set(str(i)+"/"+str(limit))
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def run():
th = threading.Thread(target=heavy)
th.setDaemon(True)
th.start()
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
top = Tk()
top.title('Heavy task')
top.geometry('500x300+290+100')
top.resizable(False, False)
top.config(bg='#ffffff')
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 进度文本
inputload1 = StringVar()
entry_process = Entry(top, show=None,width=25,textvariable = inputload1)
entry_process.place(x=300,y=140)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 按钮
button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
button_start.place(relx=0.45, rely=0.5, anchor=CENTER)
top.mainloop()
没得吧,你或许可以弄的进度条模块,开线程来显示 不是答案,只是思路:
limit = 10000000000
mili_limit = limit//1000
for i in range(limit):
do_something()
if(i%mili_limit == 0):
process = str(i)+"/"+str(limit)
首先,进度如何,肯定是没有一个另外的程序,来判定你的程序,参考图灵停机
对于进度如何,当然是你心里最清楚了,比如 1/100->30/100->100/100
你想怎么表示,最简单的就是打印当前比例,这个不涉及刷新。
什么叫刷新,比如图形界面,你用了一个控件,他来表示当前进度,实际你程序在执行中,你修改了他的值,没有轮到画面刷新,这样你想表示的进度,他只会在你的程序完成后,最后轮到画面刷新的时候,再刷新,那么一开始是0/100,最后程序都结束了,表示100/100,而中途你想表示的进度,实际画面是没有表示出来的。所以这个估计要再开一个线程才行。 java2python 发表于 2020-6-11 13:23
不是答案,只是思路:
首先,进度如何,肯定是没有一个另外的程序,来判定你的程序,参考图灵停机
程序执行的时候想就让在屏幕上方提示“程序正在执行中“,然后结束的话就让提示“程序已结束“,可否实现,非常感谢 屏幕上方,指的是控制台输出(这个非常简单,直接print),还是你有画面,想在画面上表示,这个就涉及到了刷新的问题。 控制台表示进度:https://blog.csdn.net/u013832707/article/details/73608504/
# -*- coding: UTF-8 -*-
import sys, time
class ShowProcess():
"""
显示处理进度的类
调用该类相关函数即可实现处理进度的显示
"""
i = 0 # 当前的处理进度
max_steps = 0 # 总共需要处理的次数
max_arrow = 50 #进度条的长度
infoDone = 'done'
# 初始化函数,需要知道总共的处理次数
def __init__(self, max_steps, infoDone = 'Done'):
self.max_steps = max_steps
self.i = 0
self.infoDone = infoDone
# 显示函数,根据当前的处理进度i显示进度
# 效果为[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]100.00%
def show_process(self, i=None):
if i is not None:
self.i = i
else:
self.i += 1
num_arrow = int(self.i * self.max_arrow / self.max_steps) #计算显示多少个'>'
num_line = self.max_arrow - num_arrow #计算显示多少个'-'
percent = self.i * 100.0 / self.max_steps #计算完成进度,格式为xx.xx%
process_bar = '[' + '>' * num_arrow + '-' * num_line + ']'\
+ '%.2f' % percent + '%' + '\r' #带输出的字符串,'\r'表示不换行回到最左边
sys.stdout.write(process_bar) #这两句打印字符到终端
sys.stdout.flush()
if self.i >= self.max_steps:
self.close()
def close(self):
print('')
print(self.infoDone)
self.i = 0
if True:
max_steps = 100
process_bar = ShowProcess(max_steps, 'OK')
for i in range(max_steps):
process_bar.show_process()
time.sleep(0.01)
GUI表示进度:https://blog.csdn.net/polyhedronx/article/details/82291189
import time
import threading
from tkinter import *
def update_progress_bar():
for percent in range(1, 101):
hour = int(percent/3600)
minute = int(percent/60) - hour*60
second = percent % 60
green_length = int(sum_length * percent / 100)
canvas_progress_bar.coords(canvas_shape, (0, 0, green_length, 25))
canvas_progress_bar.itemconfig(canvas_text, text='%02d:%02d:%02d' % (hour, minute, second))
var_progress_bar_percent.set('%0.2f%%' % percent)
time.sleep(1)
def run():
th = threading.Thread(target=update_progress_bar)
th.setDaemon(True)
th.start()
top = Tk()
top.title('Progress Bar')
top.geometry('800x500+290+100')
top.resizable(False, False)
top.config(bg='#535353')
# 进度条
sum_length = 630
canvas_progress_bar = Canvas(top, width=sum_length, height=20)
canvas_shape = canvas_progress_bar.create_rectangle(0, 0, 0, 25, fill='green')
canvas_text = canvas_progress_bar.create_text(292, 4, anchor=NW)
canvas_progress_bar.itemconfig(canvas_text, text='00:00:00')
var_progress_bar_percent = StringVar()
var_progress_bar_percent.set('00.00%')
label_progress_bar_percent = Label(top, textvariable=var_progress_bar_percent, fg='#F5F5F5', bg='#535353')
canvas_progress_bar.place(relx=0.45, rely=0.4, anchor=CENTER)
label_progress_bar_percent.place(relx=0.89, rely=0.4, anchor=CENTER)
# 按钮
button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
button_start.place(relx=0.45, rely=0.5, anchor=CENTER)
top.mainloop()
print('start')
print('end') 尝试设置一个 flag
当 flag 为 False 时,表示执行完毕
否则就是在执行 本帖最后由 BIO-张磊 于 2020-6-12 12:41 编辑
from tqdm import tqdm
可以尝试使用tqdm模块,他是一个进度条模块,举个例子吧
from tqdm import tqdm
i = 0
for i in tqdm(range(100000000)):##这么大的数字只是为了让你感官一下,他的运行过程,因为i = i+1 这个操作太简单了,假如太小了,你都看不到进度条加载的过程
i = i+1
else:
print (i)
java2python 发表于 2020-6-11 15:59
屏幕上方,指的是控制台输出(这个非常简单,直接print),还是你有画面,想在画面上表示,这个就涉及到了 ...
"还是你有画面,想在画面上表示,这个就涉及到了刷新的问题"
就是想显示在画面上方,这个该怎么表示啊,是否有相关模块,学习一下,谢谢啊 谢谢你的评分:我贴个图,你看看能不能理解
页:
[1]