Python 3+ Tkinter中心标签文本

问题描述 投票:0回答:3

这是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",但我想在这里,所以标签小部件调整窗口大小,所以我卡住了。

python-3.x tkinter label
3个回答
4
投票

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

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

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

例如,给出这些import语句:

import tkinter as tk
from tkinter import ttk

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


2
投票

这是命名空间聚类的教科书示例。你正在使用以下行来聚类python的命名空间:

from tkinter import *
from tkinter.ttk import *

这意味着如果有一个与tkinter.ttk类同名的tkinter类,将使用ttk,例如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()

0
投票

第一种方式:

from tkinter import *
import tkinter.ttk as ttk

第二种方式:

from tkinter import *
from tkinter import ttk

通过这两种方式,第一行导入tk小部件,第二行导入ttk小部件。第一种方式更清晰,但大多数教程使用第二种方式。

例:

root = Tk()

button_1 = ttk.Button(root, text='Button 1').pack(padx=20, pady=10)
button_2 = Button(root, text='Button 2').pack(padx=20, pady=10)

root.mainloop()

因此,如果您想使用tkinter.ttk中的Button小部件,请编写ttk.Button(如button_1)。如果你想使用tkinter中的Button小部件(较旧的那个),你只需要调用Button(比如button_2)。

© www.soinside.com 2019 - 2024. All rights reserved.