回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><strong>*为了消除任何混淆,我使用了macOS Catalina、Python3.7.4和Tcl/Tk 8.6.9*</strong></p>
<p>我有一个项目,使用'黑色'作为主题,从主题tk在ttk主题。我正在尝试修改按钮的样式。你知道吗</p>
<p>但是,除了set\u theme\u advanced()方法之外,我还没有弄清楚如何修改主题,该方法只更改我正在阅读的<a href="https://buildmedia.readthedocs.org/media/pdf/ttkthemes/latest/ttkthemes.pdf" rel="nofollow noreferrer">here</a>的颜色。我想将按钮文本更改为在主题内居中。但是,在解决这个问题的过程中,我发现我无法在下面的示例代码中修改任何窗口中按钮文本的位置(对齐)。你知道吗</p>
<p>如果您查看这个示例代码,您将看到在第一个窗口中,文本在按钮上左对齐,但颜色正确,但是在第二个窗口(使用Tk),文本在所有按钮上居中对齐,而不是颜色正确。两个窗口都没有响应对齐样式,Tk窗口似乎没有响应任何自定义样式。你知道吗</p>
<pre><code># test-ttk-button-style.py
import tkinter as tk
from tkinter import ttk, NSEW
from ttkthemes import themed_tk as tkt
window1 = tkt.ThemedTk()
window1.get_themes()
window1.set_theme("black")
window1.title("First Window")
window1.geometry("+20+70")
window2 = tk.Tk()
window2.title("Second Window")
window2.geometry("+400+70")
ttkStyle = ttk.Style()
ttkStyle.configure("left.TButton", justify="left", background="green", foreground="white", font="Helvetica 12 bold")
ttkStyle.configure("right.TButton", justify="right", background="blue", foreground="white", font="Helvetica 12 bold")
ttkStyle.configure("center.TButton", justify="center", background="red", foreground="white", font="Helvetica 12 bold")
w1content = ttk.Frame(window1, padding=(12,12,12,12))
w1content.grid(row=0, column=0, sticky=NSEW)
w1btn1 = tkt.ttk.Button(w1content, text="First Button in Window 1", style="left.TButton")
w1btn1.grid(row=0, column=0, padx=30, pady=30)
w1btn2 = tkt.ttk.Button(w1content, text="Second Button in Window 1", width=25, style="right.TButton")
w1btn2.grid(row=1, column=0, padx=30, pady=30)
w1btn3 = tkt.ttk.Button(w1content, text="Third Button in Window 1", width=25, style="center.TButton")
w1btn3.grid(row=2, column=0, padx=30, pady=30)
w1btn4 = tkt.ttk.Button(w1content, text="Fourth Button in Window 1", width=25)
w1btn4.grid(row=3, column=0, padx=30, pady=30)
w2content = ttk.Frame(window2, padding=(12,12,12,12))
w2content.grid(row=0, column=0, sticky=NSEW)
w2btn1 = tkt.ttk.Button(w2content, text="First Button in Window 2", style="left.TButton")
w2btn1.grid(row=0, column=0, padx=30, pady=30)
w2btn2 = tkt.ttk.Button(w2content, text="Second Button in Window 2", width=25, style="right.TButton")
w2btn2.grid(row=1, column=0, padx=30, pady=30)
w2btn3 = tkt.ttk.Button(w2content, text="Third Button in Window 2", width=25, style="center.TButton")
w2btn3.grid(row=2, column=0, padx=30, pady=30)
w2btn4 = tkt.ttk.Button(w2content, text="Fourth Button in Window 2", width=25)
w2btn4.grid(row=3, column=0, padx=30, pady=30)
window1.mainloop()
</code></pre>
<p>提前谢谢你的帮助。你知道吗</p>
<p>这是我在电脑上看到的照片。
<a href="https://i.stack.imgur.com/KDnac.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/KDnac.png" alt="Resulting windows"/></a></p>
<p>编辑
在阅读了下面的答案后,我将代码分解为两个文件,这样就不会有两个主窗口。这确实改变了Window2的行为方式,但是样式仍然没有被应用。然后我只使用Tk和ttk创建了第三个窗口,但仍然没有应用该样式。你知道吗</p>
<p>窗口1(带主题和“黑色”主题样式集)</p>
<pre><code># test-ttk-button-style1.py
import tkinter as tk
from tkinter import ttk, NSEW
from ttkthemes import themed_tk as tkt
window1 = tkt.ThemedTk()
window1.get_themes()
window1.set_theme("black")
window1.title("First Window")
window1.geometry("+0+0")
ttkStyle = ttk.Style()
ttkStyle.configure("left.TButton", justify="left", background="green", foreground="white", font="Helvetica 12 bold")
ttkStyle.configure("right.TButton", justify="right", background="blue", foreground="white", font="Helvetica 20 bold")
ttkStyle.configure("center.TButton", justify="center", background="red", foreground="white", font="Helvetica 32 bold")
w1content = ttk.Frame(window1, padding=(12,12,12,12))
w1content.grid(row=0, column=0, sticky=NSEW)
w1btn1 = tkt.ttk.Button(w1content, text="First Button in Window 1", style="left.TButton")
w1btn1.grid(row=0, column=0, padx=30, pady=30)
w1btn2 = tkt.ttk.Button(w1content, text="Second Button in Window 1", width=25, style="right.TButton")
w1btn2.grid(row=1, column=0, padx=30, pady=30)
w1btn3 = tkt.ttk.Button(w1content, text="Third Button in Window 1", width=25, style="center.TButton")
w1btn3.grid(row=2, column=0, padx=30, pady=30)
w1btn4 = tkt.ttk.Button(w1content, text="Fourth Button in Window 1", width=25)
w1btn4.grid(row=3, column=0, padx=30, pady=30)
window1.mainloop()
</code></pre>
<p>这是我电脑上的结果:
<a href="https://i.stack.imgur.com/29srr.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/29srr.png" alt="Window 1 result"/></a></p>
<p>窗口2(主题不带主题样式集)</p>
<pre><code># test-ttk-button-style2.py
import tkinter as tk
from tkinter import ttk, NSEW
from ttkthemes import themed_tk as tkt
window2 = tk.Tk()
window2.title("Second Window")
ttkStyle = ttk.Style()
ttkStyle.configure("left.TButton", justify="left", background="green", foreground="white", font="Helvetica 12 bold")
ttkStyle.configure("right.TButton", justify="right", background="blue", foreground="white", font="Helvetica 20 bold")
ttkStyle.configure("center.TButton", justify="center", background="red", foreground="white", font="Helvetica 32 bold")
w2content = ttk.Frame(window2, padding=(12,12,12,12))
w2content.grid(row=0, column=0, sticky=NSEW)
w2btn1 = tkt.ttk.Button(w2content, text="First Button in Window 2", style="left.TButton")
w2btn1.grid(row=0, column=0, padx=30, pady=30)
w2btn2 = tkt.ttk.Button(w2content, text="Second Button in Window 2", width=25, style="right.TButton")
w2btn2.grid(row=1, column=0, padx=30, pady=30)
w2btn3 = tkt.ttk.Button(w2content, text="Third Button in Window 2", width=25, style="center.TButton")
w2btn3.grid(row=2, column=0, padx=30, pady=30)
w2btn4 = tkt.ttk.Button(w2content, text="Fourth Button in Window 2", width=25)
w2btn4.grid(row=3, column=0, padx=30, pady=30)
window2.mainloop()
</code></pre>
<p>我电脑上的结果:
<a href="https://i.stack.imgur.com/0GqIw.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/0GqIw.png" alt="Window 2 result"/></a>
窗口3(无任何标题)</p>
<pre><code>#test-ttk-button-style3.py
import tkinter as tk
from tkinter import ttk, NSEW
window3 = tk.Tk()
window3.title("Third Window")
ttkStyle = ttk.Style()
ttkStyle.configure("left.TButton", justify="left", background="green", foreground="white", font="Helvetica 12 bold")
ttkStyle.configure("right.TButton", justify="right", background="blue", foreground="white", font="Helvetica 20 bold")
ttkStyle.configure("center.TButton", justify="center", background="red", foreground="white", font="Helvetica 32 bold")
w3content = ttk.Frame(window3, padding=(12,12,12,12))
w3content.grid(row=0, column=0, sticky=NSEW)
w3btn1 = ttk.Button(w3content, text="First Button in Window 3", style="left.TButton")
w3btn1.grid(row=0, column=0, padx=30, pady=30)
w3btn2 = ttk.Button(w3content, text="Second Button in Window 3", width=25, style="right.TButton")
w3btn2.grid(row=1, column=0, padx=30, pady=30)
w3btn3 = ttk.Button(w3content, text="Third Button in Window 3", width=25, style="center.TButton")
w3btn3.grid(row=2, column=0, padx=30, pady=30)
w3btn4 = ttk.Button(w3content, text="Fourth Button in Window 3", width=25)
w3btn4.grid(row=3, column=0, padx=30, pady=30)
window3.mainloop()
</code></pre>
<p>我的计算机上的结果:
<a href="https://i.stack.imgur.com/FBoUI.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/FBoUI.png" alt="Window 3 result"/></a></p>