我想将tk.Progressbar()
放在tk.Text()
的最后一行。 tk.Text()
被定义为仅显示5行文本。因此,tk.Progressbar()
应该出现在tk.Text()
的第4行中。目前,我只能将tk.Progressbar()
放在tk.Text()
的第一行中(请参阅测试脚本的输出)。
问题:
tk.Progressbar()
放在tk.Text()
的第4行? tk.Progressbar()
跨越tk.Text()
的整个宽度?当前,我必须手动更改width
的{{1}}选项的值。有没有更好/更轻松/自动的方法? tk.Progressbar()
?由于我没有使用tk.Progressbar()
/ grid
/ pack
方法来放置place
的位置,因此在tk.Progressbar()
中显示和隐藏窗口小部件的相应命令是什么? ?注意:我希望tk.Text()
仅使用tk.Text()
的第4行。
测试脚本:
tk.Progressbar()
答案 0 :(得分:0)
根据@jasonharper,我将很难使用
msg.window_create( tk.INSERT, window=pbar )
将进度条放置在我想要的位置。
下面的脚本显示了我对问题1、2和3的回答。简要地说,可以使用.place()
和.place_forget()
方法以我想要的方式放置.Progressbar()
。另外,.winfo_reqwidth()
和.winfo_width()
可用于确定现有窗口小部件的适当尺寸。
修订的测试版本:
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
msg = tk.Text( root, width=60, height=5 )
pbar = ttk.Progressbar( msg, mode='indeterminate',
orient=tk.HORIZONTAL,
)
msg.grid( row=0, column=0, padx=10, pady=10 )
# .winfo_reqwidth() gives the width of .Text(). Subtract 2 pixel to account for
# its left and right borderwidth. The resultant is should be the width of the
# .Progressbar().
pbar['length'] = msg.winfo_reqwidth()-2
# Use .place() method to give the illusion of placing progressbar inside .Text()
# Method 1:
#pbar.place( x=1, y=msg.winfo_reqheight()-pbar.winfo_reqheight(),
# bordermode="outside" )
# Method 2:
pbar.place( anchor='sw', x=1, y=msg.winfo_reqheight(), bordermode="outside" )
# Use .place_forget() and .place() to hide and reappear .Progressbar().
root.after( 3000, lambda: pbar.place_forget() )
root.after( 6000, lambda: pbar.place( anchor='sw', x=1,
y=msg.winfo_reqheight(),
bordermode="outside" ) )