Python 3 Tkinter 中心标签文本

新手上路,请多包涵

这是 Windows 操作系统上 Python 3+ 的 tkinter 问题。所以我知道如何将标签文本 (justify=CENTER) 并且我从我搜索过的所有标签文本中知道默认情况下是合理的居中。

有人可以看看我下面的代码,请告诉我我做错了什么。我已经在网上搜索了几个小时,但我看不出我做错了什么。

 from tkinter import *
from tkinter.ttk import *

class MainApplication():

    def __init__(self, master):
        self.master = master
        self.master.title("OOP GUI Example")
        self.master.iconbitmap("Blank.ico")

        label = Label(self.master, text="Test Callback", )
        greet_button = Button(self.master, width=25, text="Greet", command=self.greet)
        close_button = Button(self.master, width=25, text="Close", command=self.close)

        Grid.columnconfigure(self.master, 0, weight=1)
        Grid.rowconfigure(self.master, (0,1,2), weight=1)

        label.grid(row=0, column=0, sticky="NSWE",padx=(10, 10), pady=(7.5, 0))
        greet_button.grid(row=1, column=0, sticky="NSWE", padx=(10, 10), pady=(10, 1.5))
        close_button.grid(row=2, column=0, sticky="NSWE", padx=(10, 10), pady=(1.5, 10))

    def greet(self):
        print("Greetings!")
        return

    def close(self):
        self.master.quit()
        return

root = Tk()
root.style = Style()
#  ('winnative', 'clam', 'alt', 'default', 'classic', 'vista', 'xpnative')
root.style.theme_use("clam")
gui = MainApplication(root)
root.mainloop()

此处的这一行 label.grid(row=0, column=0, sticky="NSWE",padx=(10, 10), pady=(7.5, 0)) 使文本左对齐。特别是 sticky="NSWE" 但我想要这个,所以标签小部件随窗口调整大小,所以我被卡住了。

原文由 probat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 775
2 个回答

问题是您正在阅读 tkinter 标签的文档,但您使用的是 ttk 标签。这就是为什么你不应该使用通配符导入——当两个模块导出具有相同名称的对象(例如: tkinter.Labelttk.Label )时,很难知道哪个正在使用你的代码。 ttk 标签的默认设置是左对齐,但 tkinter 标签是居中对齐的,导入的顺序意味着您使用的是 ttk 标签。

您的示例的快速修复是明确设置 anchor ttk 标签的选项(例如: label.configure(anchor="center") )。

你还应该修复你的导入,这样这个问题就不会再发生在你身上。而不是进行通配符导入(例如: from tkinter import * ),您应该将模块显式导入为一个单元,可选择使用更短的名称。一旦你这样做了,你需要在你的小部件前面加上模块的名称。

例如,给定这些导入语句:

 import tkinter as tk
from tkinter import ttk

…然后,您将使用 --- 创建一个 ttk 标签,并使用 tk.Label(...) ttk.Label(...) 创建一个 tkinter 标签,这使您的代码更易于理解,并消除了所有歧义。

原文由 Bryan Oakley 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是命名空间集群的教科书示例。您正在使用以下行对 python 的命名空间进行集群:

 from tkinter import *
from tkinter.ttk import *

this means if there’s a tkinter.ttk class that has the same name that of tkinter class, ttk one will be used, such as ButtonLabel 。显然 ttk 不一定有 tkinter.Labeljustify 选项。一个简单的头寸交换就足以证明将进口交换为:

 from tkinter.ttk import *
from tkinter import *

相反,看看会发生什么。


请参阅下面的示例,其中文本居中对齐,其中没有命名空间被聚集,使用 tkinter.Label 作为 label

 import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

label = tk.Label(root, text="Test Callback")
btn = tk.Button(root, text="Text so long that root has to resize.")
btn.pack()
label.pack(fill='both', expand=True)

root.mainloop()

请参阅下面的示例居中对齐文本,其中没有名称空间被聚集,使用 tkinter.ttk.Label 作为 label

 import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()

label = ttk.Label(root, text="Test Callback")
btn = tk.Button(root, text="Text so long that root has to resize.")
btn.pack()
label.pack(expand=True)

root.mainloop()

原文由 Nae 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进