ttk.Progressbar 不改变布局
ttk.Progressbar does not change the Layout
我想稍后在我的音乐播放器应用程序中使用 ttk.Progressbar
,但我想先更改外观。我已经在网上搜索了答案,但无济于事。
如果我使用 theme_use("default")
,下面的代码运行良好,但我不能使用它,因为它会改变我的 ttk.Treeview
的样式。对于 ttk.Treeview
我已经创建了一个 element_create("Custom.Treeheading.border", "from", "default")
和一个 layout
.
我决定制作另一个服装布局,但它不会改变小部件的外观。
代码如下:
import tkinter
from tkinter import ttk
def stoppb():
pb.stop()
def startpb():
pb.start(100)
master = tkinter.Tk()
master.minsize(width=500, height=300)
master.configure(bg="#2c2c2d")
s = ttk.Style()
#I can't use a theme because I already use create_element
#s.theme_use("default")
#I used this to figure out elements of the widget and its options
t = ttk.Progressbar(None)
tClass = t.winfo_class()
print("tClass", tClass)
layout = s.layout("Horizontal.TProgressbar")
print("layout", layout)
d = s.element_options("Horizontal.TProgressbar.trough")
e = s.element_options("Horizontal.TProgressbar")
print("element_options: Horizontal.TProgressbar.trough", d)
print("element_options: Horizontal.TProgressbar", e)
s.element_create("Niklas.Horizontal.TProgressbar.trough", "from", "default"
s.layout("Niklas.Horizontal.TProgressbar.trough", [
("Horizontal.Progressbar.trough", {"sticky": "nswe", "children": [
("Horizontal.Progressbar.pbar", {"side": "left", "sticky": "ns"})
]}),
])
s.configure("Niklas.Horizontal.TProgressbar.trough",
troughcolor="#121212",
background="#b2b2b2",
thickness=1,
troughrelief="flat",
relief="flat",
borderwidth=0)
pb = ttk.Progressbar(master,
style="Niklas.Horizontal.TProgressbar.trough",
orient="horizontal",
mode="determinate",
maximum=230)
pb.place(x=100, y=50)
tkinter.Button(master, text="Stop", command=stoppb).place(x=100, y=140)
tkinter.Button(master, text="Start", command=startpb).place(x=140, y=140)
master.mainloop()
但我正在苦苦思索解决方案。
如果您只想更改其选项,则无需创建新元素,在您的情况下,只需配置 "Niklas.Horizontal.TProgressbar" 样式即可:
import tkinter
from tkinter import ttk
master = tkinter.Tk()
s = ttk.Style()
s.configure("Niklas.Horizontal.TProgressbar",
troughcolor="#121212",
background="#b2b2b2",
thickness=1,
troughrelief="flat",
relief="flat",
borderwidth=0)
pb = ttk.Progressbar(master,
style="Niklas.Horizontal.TProgressbar",
orient="horizontal",
mode="determinate",
maximum=230)
pb.grid(columnspan=2, sticky='ew')
pb.start()
master.mainloop()
我在您的代码中发现的一个问题是您为进度条赋予了样式 "Niklas.Horizontal.TProgressbar.trough",这不是进度条样式而是样式的一个元素,因此进度条不起作用。
我想稍后在我的音乐播放器应用程序中使用 ttk.Progressbar
,但我想先更改外观。我已经在网上搜索了答案,但无济于事。
如果我使用 theme_use("default")
,下面的代码运行良好,但我不能使用它,因为它会改变我的 ttk.Treeview
的样式。对于 ttk.Treeview
我已经创建了一个 element_create("Custom.Treeheading.border", "from", "default")
和一个 layout
.
我决定制作另一个服装布局,但它不会改变小部件的外观。
代码如下:
import tkinter
from tkinter import ttk
def stoppb():
pb.stop()
def startpb():
pb.start(100)
master = tkinter.Tk()
master.minsize(width=500, height=300)
master.configure(bg="#2c2c2d")
s = ttk.Style()
#I can't use a theme because I already use create_element
#s.theme_use("default")
#I used this to figure out elements of the widget and its options
t = ttk.Progressbar(None)
tClass = t.winfo_class()
print("tClass", tClass)
layout = s.layout("Horizontal.TProgressbar")
print("layout", layout)
d = s.element_options("Horizontal.TProgressbar.trough")
e = s.element_options("Horizontal.TProgressbar")
print("element_options: Horizontal.TProgressbar.trough", d)
print("element_options: Horizontal.TProgressbar", e)
s.element_create("Niklas.Horizontal.TProgressbar.trough", "from", "default"
s.layout("Niklas.Horizontal.TProgressbar.trough", [
("Horizontal.Progressbar.trough", {"sticky": "nswe", "children": [
("Horizontal.Progressbar.pbar", {"side": "left", "sticky": "ns"})
]}),
])
s.configure("Niklas.Horizontal.TProgressbar.trough",
troughcolor="#121212",
background="#b2b2b2",
thickness=1,
troughrelief="flat",
relief="flat",
borderwidth=0)
pb = ttk.Progressbar(master,
style="Niklas.Horizontal.TProgressbar.trough",
orient="horizontal",
mode="determinate",
maximum=230)
pb.place(x=100, y=50)
tkinter.Button(master, text="Stop", command=stoppb).place(x=100, y=140)
tkinter.Button(master, text="Start", command=startpb).place(x=140, y=140)
master.mainloop()
但我正在苦苦思索解决方案。
如果您只想更改其选项,则无需创建新元素,在您的情况下,只需配置 "Niklas.Horizontal.TProgressbar" 样式即可:
import tkinter
from tkinter import ttk
master = tkinter.Tk()
s = ttk.Style()
s.configure("Niklas.Horizontal.TProgressbar",
troughcolor="#121212",
background="#b2b2b2",
thickness=1,
troughrelief="flat",
relief="flat",
borderwidth=0)
pb = ttk.Progressbar(master,
style="Niklas.Horizontal.TProgressbar",
orient="horizontal",
mode="determinate",
maximum=230)
pb.grid(columnspan=2, sticky='ew')
pb.start()
master.mainloop()
我在您的代码中发现的一个问题是您为进度条赋予了样式 "Niklas.Horizontal.TProgressbar.trough",这不是进度条样式而是样式的一个元素,因此进度条不起作用。