鱼C论坛

 找回密码
 立即注册
查看: 1809|回复: 12

[已解决]请问在Python程序运行时有没有让在屏幕上给个提示的方法

[复制链接]
发表于 2020-6-11 12:41:21 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 xue11 于 2020-6-11 15:42 编辑

问题:请问在Python程序运行时有没有让在屏幕上方给个提示,表示程序开始、结束?
或者有没有相关的模块?
想提升程序运行的观看感知
非常感谢!
最佳答案
2020-6-11 12:41:22
本帖最后由 java2python 于 2020-6-15 00:43 编辑

写代码,其实每一步都会错,可以一步一步来:
比如你先加一个文本框,放在按钮的右边,先做到这一步,然后执行一下看看,有没有问题
然后,再把这个假的进度表示代码,填到你的程序中,这是假的,和你想运行的东西,没关联,看看能不能表示进度
最后才是把你要完成的动作,和进度关联起来。
进度表示GUI例子代码:
  1. import time
  2. import threading
  3. from tkinter import *
  4.   
  5. def update_progress_bar():
  6.         for percent in range(1, 101):
  7.                 inputload1.set(str(percent)+"/100")
  8.                 time.sleep(0.1)
  9.   
  10. def run():
  11.         th = threading.Thread(target=update_progress_bar)
  12.         th.setDaemon(True)
  13.         th.start()
  14.   
  15. top = Tk()
  16. top.title('Progress Bar')
  17. top.geometry('800x500+290+100')
  18. top.resizable(False, False)
  19. top.config(bg='#535353')

  20. # 进度条
  21. inputload1 = StringVar()
  22. entry_process = Entry(top, show=None,width=6,textvariable = inputload1)
  23. entry_process.place(x=510,y=100)
  24. # 按钮
  25. button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
  26. button_start.place(relx=0.45, rely=0.5, anchor=CENTER)

  27. top.mainloop()
复制代码


假如你的代码是这样:
  1. from tkinter import *

  2. limit = 1000000000
  3. mili_limit = limit//1000
  4. def heavy():
  5.     for i in range(limit):
  6.         #do_something()
  7.         b = (i*100-300)//1000
  8.         #if(i%mili_limit == 0):
  9.         #   process = str(i)+"/"+str(limit)

  10. top = Tk()
  11. top.title('Heavy task')
  12. top.geometry('500x300+290+100')
  13. top.resizable(False, False)
  14. top.config(bg='#ffffff')

  15. # 按钮
  16. button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=heavy, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
  17. button_start.place(relx=0.45, rely=0.5, anchor=CENTER)

  18. top.mainloop()
复制代码


那么结合后,能表示执行进度的代码就是这样(你最好有文件比较器,看看两个文件哪里做了修改):
  1. import threading
  2. from tkinter import *

  3. limit = 1000000000
  4. mili_limit = limit//1000
  5. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  6. def heavy():
  7.     for i in range(limit):
  8.         #do_something()
  9.         b = (i*100-300)//1000
  10.         if(i%mili_limit == 0):
  11.             inputload1.set(str(i)+"/"+str(limit))
  12. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  13. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  14. def run():
  15.         th = threading.Thread(target=heavy)
  16.         th.setDaemon(True)
  17.         th.start()
  18. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  19. top = Tk()
  20. top.title('Heavy task')
  21. top.geometry('500x300+290+100')
  22. top.resizable(False, False)
  23. top.config(bg='#ffffff')

  24. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  25. # 进度文本
  26. inputload1 = StringVar()
  27. entry_process = Entry(top, show=None,width=25,textvariable = inputload1)
  28. entry_process.place(x=300,y=140)
  29. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  30. # 按钮
  31. button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
  32. button_start.place(relx=0.45, rely=0.5, anchor=CENTER)

  33. top.mainloop()
复制代码

最佳答案

查看完整内容

写代码,其实每一步都会错,可以一步一步来: 比如你先加一个文本框,放在按钮的右边,先做到这一步,然后执行一下看看,有没有问题 然后,再把这个假的进度表示代码,填到你的程序中,这是假的,和你想运行的东西,没关联,看看能不能表示进度 最后才是把你要完成的动作,和进度关联起来。 进度表示GUI例子代码: 假如你的代码是这样: 那么结合后,能表示执行进度的代码就是这样(你最好有文件比较器,看看两个文 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 12:41:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 java2python 于 2020-6-15 00:43 编辑

写代码,其实每一步都会错,可以一步一步来:
比如你先加一个文本框,放在按钮的右边,先做到这一步,然后执行一下看看,有没有问题
然后,再把这个假的进度表示代码,填到你的程序中,这是假的,和你想运行的东西,没关联,看看能不能表示进度
最后才是把你要完成的动作,和进度关联起来。
进度表示GUI例子代码:
  1. import time
  2. import threading
  3. from tkinter import *
  4.   
  5. def update_progress_bar():
  6.         for percent in range(1, 101):
  7.                 inputload1.set(str(percent)+"/100")
  8.                 time.sleep(0.1)
  9.   
  10. def run():
  11.         th = threading.Thread(target=update_progress_bar)
  12.         th.setDaemon(True)
  13.         th.start()
  14.   
  15. top = Tk()
  16. top.title('Progress Bar')
  17. top.geometry('800x500+290+100')
  18. top.resizable(False, False)
  19. top.config(bg='#535353')

  20. # 进度条
  21. inputload1 = StringVar()
  22. entry_process = Entry(top, show=None,width=6,textvariable = inputload1)
  23. entry_process.place(x=510,y=100)
  24. # 按钮
  25. button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
  26. button_start.place(relx=0.45, rely=0.5, anchor=CENTER)

  27. top.mainloop()
复制代码


假如你的代码是这样:
  1. from tkinter import *

  2. limit = 1000000000
  3. mili_limit = limit//1000
  4. def heavy():
  5.     for i in range(limit):
  6.         #do_something()
  7.         b = (i*100-300)//1000
  8.         #if(i%mili_limit == 0):
  9.         #   process = str(i)+"/"+str(limit)

  10. top = Tk()
  11. top.title('Heavy task')
  12. top.geometry('500x300+290+100')
  13. top.resizable(False, False)
  14. top.config(bg='#ffffff')

  15. # 按钮
  16. button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=heavy, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
  17. button_start.place(relx=0.45, rely=0.5, anchor=CENTER)

  18. top.mainloop()
复制代码


那么结合后,能表示执行进度的代码就是这样(你最好有文件比较器,看看两个文件哪里做了修改):
  1. import threading
  2. from tkinter import *

  3. limit = 1000000000
  4. mili_limit = limit//1000
  5. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  6. def heavy():
  7.     for i in range(limit):
  8.         #do_something()
  9.         b = (i*100-300)//1000
  10.         if(i%mili_limit == 0):
  11.             inputload1.set(str(i)+"/"+str(limit))
  12. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  13. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  14. def run():
  15.         th = threading.Thread(target=heavy)
  16.         th.setDaemon(True)
  17.         th.start()
  18. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  19. top = Tk()
  20. top.title('Heavy task')
  21. top.geometry('500x300+290+100')
  22. top.resizable(False, False)
  23. top.config(bg='#ffffff')

  24. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  25. # 进度文本
  26. inputload1 = StringVar()
  27. entry_process = Entry(top, show=None,width=25,textvariable = inputload1)
  28. entry_process.place(x=300,y=140)
  29. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  30. # 按钮
  31. button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
  32. button_start.place(relx=0.45, rely=0.5, anchor=CENTER)

  33. top.mainloop()
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 13:17:47 | 显示全部楼层
没得吧,你或许可以弄的进度条模块,开线程来显示
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 13:23:01 | 显示全部楼层
不是答案,只是思路:
  1. limit = 10000000000
  2. mili_limit = limit//1000
  3. for i in range(limit):
  4.     do_something()
  5.     if(i%mili_limit == 0):
  6.        process = str(i)+"/"+str(limit)
复制代码

首先,进度如何,肯定是没有一个另外的程序,来判定你的程序,参考图灵停机
对于进度如何,当然是你心里最清楚了,比如 1/100->30/100->100/100
你想怎么表示,最简单的就是打印当前比例,这个不涉及刷新。
什么叫刷新,比如图形界面,你用了一个控件,他来表示当前进度,实际你程序在执行中,你修改了他的值,没有轮到画面刷新,这样你想表示的进度,他只会在你的程序完成后,最后轮到画面刷新的时候,再刷新,那么一开始是0/100,最后程序都结束了,表示100/100,而中途你想表示的进度,实际画面是没有表示出来的。所以这个估计要再开一个线程才行。

评分

参与人数 1鱼币 +5 收起 理由
xue11 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-11 15:46:21 From FishC Mobile | 显示全部楼层
java2python 发表于 2020-6-11 13:23
不是答案,只是思路:

首先,进度如何,肯定是没有一个另外的程序,来判定你的程序,参考图灵停机

程序执行的时候想就让在屏幕上方提示“程序正在执行中“,然后结束的话就让提示“程序已结束“,可否实现,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 15:59:12 | 显示全部楼层
屏幕上方,指的是控制台输出(这个非常简单,直接print),还是你有画面,想在画面上表示,这个就涉及到了刷新的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 16:25:35 | 显示全部楼层
控制台表示进度:https://blog.csdn.net/u013832707/article/details/73608504/
  1. # -*- coding: UTF-8 -*-

  2. import sys, time

  3. class ShowProcess():
  4.     """
  5.     显示处理进度的类
  6.     调用该类相关函数即可实现处理进度的显示
  7.     """
  8.     i = 0 # 当前的处理进度
  9.     max_steps = 0 # 总共需要处理的次数
  10.     max_arrow = 50 #进度条的长度
  11.     infoDone = 'done'

  12.     # 初始化函数,需要知道总共的处理次数
  13.     def __init__(self, max_steps, infoDone = 'Done'):
  14.         self.max_steps = max_steps
  15.         self.i = 0
  16.         self.infoDone = infoDone

  17.     # 显示函数,根据当前的处理进度i显示进度
  18.     # 效果为[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]100.00%
  19.     def show_process(self, i=None):
  20.         if i is not None:
  21.             self.i = i
  22.         else:
  23.             self.i += 1
  24.         num_arrow = int(self.i * self.max_arrow / self.max_steps) #计算显示多少个'>'
  25.         num_line = self.max_arrow - num_arrow #计算显示多少个'-'
  26.         percent = self.i * 100.0 / self.max_steps #计算完成进度,格式为xx.xx%
  27.         process_bar = '[' + '>' * num_arrow + '-' * num_line + ']'\
  28.                       + '%.2f' % percent + '%' + '\r' #带输出的字符串,'\r'表示不换行回到最左边
  29.         sys.stdout.write(process_bar) #这两句打印字符到终端
  30.         sys.stdout.flush()
  31.         if self.i >= self.max_steps:
  32.             self.close()

  33.     def close(self):
  34.         print('')
  35.         print(self.infoDone)
  36.         self.i = 0

  37. if True:
  38.     max_steps = 100

  39.     process_bar = ShowProcess(max_steps, 'OK')

  40.     for i in range(max_steps):
  41.         process_bar.show_process()
  42.         time.sleep(0.01)
复制代码

评分

参与人数 1鱼币 +5 收起 理由
xue11 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 16:34:34 | 显示全部楼层
GUI表示进度:https://blog.csdn.net/polyhedronx/article/details/82291189
  1. import time
  2. import threading
  3. from tkinter import *


  4. def update_progress_bar():
  5.         for percent in range(1, 101):
  6.                 hour = int(percent/3600)
  7.                 minute = int(percent/60) - hour*60
  8.                 second = percent % 60
  9.                 green_length = int(sum_length * percent / 100)
  10.                 canvas_progress_bar.coords(canvas_shape, (0, 0, green_length, 25))
  11.                 canvas_progress_bar.itemconfig(canvas_text, text='%02d:%02d:%02d' % (hour, minute, second))
  12.                 var_progress_bar_percent.set('%0.2f  %%' % percent)
  13.                 time.sleep(1)


  14. def run():
  15.         th = threading.Thread(target=update_progress_bar)
  16.         th.setDaemon(True)
  17.         th.start()


  18. top = Tk()
  19. top.title('Progress Bar')
  20. top.geometry('800x500+290+100')
  21. top.resizable(False, False)
  22. top.config(bg='#535353')

  23. # 进度条
  24. sum_length = 630
  25. canvas_progress_bar = Canvas(top, width=sum_length, height=20)
  26. canvas_shape = canvas_progress_bar.create_rectangle(0, 0, 0, 25, fill='green')
  27. canvas_text = canvas_progress_bar.create_text(292, 4, anchor=NW)
  28. canvas_progress_bar.itemconfig(canvas_text, text='00:00:00')
  29. var_progress_bar_percent = StringVar()
  30. var_progress_bar_percent.set('00.00  %')
  31. label_progress_bar_percent = Label(top, textvariable=var_progress_bar_percent, fg='#F5F5F5', bg='#535353')
  32. canvas_progress_bar.place(relx=0.45, rely=0.4, anchor=CENTER)
  33. label_progress_bar_percent.place(relx=0.89, rely=0.4, anchor=CENTER)
  34. # 按钮
  35. button_start = Button(top, text='开始', fg='#F5F5F5', bg='#7A7A7A', command=run, height=1, width=15, relief=GROOVE, bd=2, activebackground='#F5F5F5', activeforeground='#535353')
  36. button_start.place(relx=0.45, rely=0.5, anchor=CENTER)

  37. top.mainloop()
复制代码

评分

参与人数 1鱼币 +5 收起 理由
xue11 + 5

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 18:31:32 | 显示全部楼层
print('start')
print('end')
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 20:52:16 From FishC Mobile | 显示全部楼层
尝试设置一个 flag
当 flag 为 False 时,表示执行完毕
否则就是在执行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-12 12:37:21 | 显示全部楼层
本帖最后由 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)

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-14 22:47:30 | 显示全部楼层
java2python 发表于 2020-6-11 15:59
屏幕上方,指的是控制台输出(这个非常简单,直接print),还是你有画面,想在画面上表示,这个就涉及到了 ...


"还是你有画面,想在画面上表示,这个就涉及到了刷新的问题"
就是想显示在画面上方,这个该怎么表示啊,是否有相关模块,学习一下,谢谢啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-14 23:37:02 | 显示全部楼层
谢谢你的评分:我贴个图,你看看能不能理解
process.jpg
process3.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 19:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表