python - Tkinter 中的进度条,里面有标签

标签 python tkinter progress-bar

是否可以改进我在 Tkinter-Python 中的进度条在中间添加标签(例如:读取文件)?

我试图找到一个优雅的编码解决方案,但没有真正的结果

from Tkinter import *
import ttk
import tkFileDialog
import time

class MainWindow(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.master.title("ProgressBar example")
        self.master.minsize(200, 100)
        self.grid(sticky=E+W+N+S)

        top = self.winfo_toplevel()
        top.rowconfigure(0, weight=1)
        top.columnconfigure(0, weight=1)

        self.start_ind = Button(self, text='Start indeterminate', command=self.start_ind, activeforeground="red")
        self.start_ind.grid(row=0, column=0, pady=2, padx=2, sticky=E+W+N+S)

        self.pbar_ind = ttk.Progressbar(self, orient="horizontal", length=300, mode="indeterminate")
        self.pbar_ind.grid(row=1, column=0, pady=2, padx=2, sticky=E+W+N+S)

   def start_ind(self):
        for i in xrange(50):
            self.pbar_ind.step(1)
            self.update()
            # Busy-wait
            time.sleep(0.1)

if __name__=="__main__":
   d = MainWindow()
   d.mainloop()

最佳答案

我通过创建自定义 ttk 样式布局在进度条内添加了标签。通过配置样式改变标签的文字:

from tkinter import Tk
from tkinter.ttk import Progressbar, Style, Button
from time import sleep


root = Tk()
s = Style(root)
# add the label to the progressbar style
s.layout("LabeledProgressbar",
         [('LabeledProgressbar.trough',
           {'children': [('LabeledProgressbar.pbar',
                          {'side': 'left', 'sticky': 'ns'}),
                         ("LabeledProgressbar.label",   # label inside the bar
                          {"sticky": ""})],
           'sticky': 'nswe'})])

p = Progressbar(root, orient="horizontal", length=300,
                style="LabeledProgressbar")
p.pack()

# change the text of the progressbar, 
# the trailing spaces are here to properly center the text
s.configure("LabeledProgressbar", text="0 %      ")

def fct():
    for i in range(1, 101):
        sleep(0.1)
        p.step()
        s.configure("LabeledProgressbar", text="{0} %      ".format(i))
        root.update()

Button(root, command=fct, text="launch").pack()

root.mainloop()

screenshot

关于python - Tkinter 中的进度条,里面有标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24768090/

相关文章:

python - Tkinter Focus 不工作 - 需要按钮键盘根据焦点输入 2 个不同的条目

python - 单击时更改按钮外观

python通过按钮事件清除文本框

android - 不确定的 ProgressBar 使我的后台线程非常慢

python - 使用自动发现获取 Microsoft Exchange 帐户的 Imap 详细信息

android - Python SL4A 开发

python - 使用 Airflow MySqlOperator 时插入查询中的语法错误

python - 覆盖 sphinx/docutils 中的默认字段名称限制

html - 进度条线条消失 CSS

java - 小程序加载时的进度条