鱼C论坛

 找回密码
 立即注册
查看: 1458|回复: 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例子代码:
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()

最佳答案

查看完整内容

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

使用道具 举报

发表于 2020-6-11 12:41:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 13:17:47 | 显示全部楼层
没得吧,你或许可以弄的进度条模块,开线程来显示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 13:23:01 | 显示全部楼层
不是答案,只是思路:
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,而中途你想表示的进度,实际画面是没有表示出来的。所以这个估计要再开一个线程才行。

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

程序执行的时候想就让在屏幕上方提示“程序正在执行中“,然后结束的话就让提示“程序已结束“,可否实现,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2020-6-11 16:25:35 | 显示全部楼层
控制台表示进度: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)

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 16:34:34 | 显示全部楼层
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()

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 18:31:32 | 显示全部楼层
print('start')
print('end')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 20:52:16 From FishC Mobile | 显示全部楼层
尝试设置一个 flag
当 flag 为 False 时,表示执行完毕
否则就是在执行
想知道小甲鱼最近在做啥?请访问 -> 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)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


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

使用道具 举报

发表于 2020-6-14 23:37:02 | 显示全部楼层
谢谢你的评分:我贴个图,你看看能不能理解
process.jpg
process3.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 23:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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