Python 3+ Tkinter中心标签文本

pro*_*bat 1 label tkinter python-3.x

这是Windows OS上针对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()
Run Code Online (Sandbox Code Playgroud)

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

Bry*_*ley 7

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

您的示例的快速解决方案是显式设置anchorttk标签的选项(例如:)label.configure(anchor="center")

您还应该修复导入,以免再次发生此问题。而不是进行通配符导入(例如:),from tkinter import *您应该将模块作为一个单元显式导入,可以使用较短的名称。完成后,您需要为小部件添加模块名称前缀。

例如,鉴于以下导入语句:

import tkinter as tk
from tkinter import ttk
Run Code Online (Sandbox Code Playgroud)

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