不能使用锚或对齐方式定位按钮内容

时间:2019-03-14 13:20:19

标签: python-3.x tkinter ttk

我有动态按钮标签,每次单击它都会更改。问题是,当按钮上的文本更改时,按钮的宽度也一样。因此,我为按钮设置了固定宽度。

此后,出现另一个问题。内容在按钮内居中,因此每个更改图像和标签上都会移动一点。因此,我尝试将所有内容都放置在左侧以减少内容颤抖。

我浏览了一下文档,发现按钮小部件支持定位选项来定位内容。但是,当我尝试时,出现错误:

  

_tkinter.TclError:未知选项“-锚”

我找到了另一种选择,证明,但结果是相同的:

  

_tkinter.TclError:未知选项“ -justify”

有人知道如何处理吗?我将与您分享我的代码:

self.btnServiceIo = ttk.Button(
    top_buttons_frame,
    text="Usługa automatyczna",
    image=self.ioBtnImg_off,
    compound=tk.LEFT,
    width=30,
    justify=tk.LEFT,
    anchor='w')
self.btnServiceIo.pack(side=tk.LEFT)
self.btnServiceIo.bind("<ButtonRelease>", self.IObuttonToggle)

(我不同时使用justify和anchor,我只是将它们发布在一起以向您展示我的使用方式) 我将发布我的应用图片,以引起您的注意。我的客户不仅希望切换显示某些服务状态的图像,还希望获取附近的文本信息。 enter image description here

2 个答案:

答案 0 :(得分:1)

对于ttk按钮,您可以设置ttk样式的锚点选项,请参见anchor entry on this page

例如:

import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk

root = tk.Tk()

s = ttk.Style()
s.configure('TButton', anchor=tk.W)

buttonImage = Image.open('test.png')
buttonPhoto = ImageTk.PhotoImage(buttonImage) 

btnServiceIo = ttk.Button(
    root,
    text="Usługa automatyczna",
    image=buttonPhoto,
    compound=tk.LEFT,
    width=30)
btnServiceIo.pack(side=tk.LEFT)

root.mainloop()

Result

答案 1 :(得分:0)

来自@fhdrsdg的答案几乎是完美的,但是它使我的一些简单按钮(仅以文本为中心)弄乱了。我必须为按钮制作专用的样式,如下所示:

# Access ttk style object
s = ttk.Style()

# Set dedicated style for button, derived from main button class
s.configure('service-io.TButton', anchor=tk.W)

self.ioBtnImg_off = tk.PhotoImage(file='../img/io.png')
self.ioBtnImg_on = tk.PhotoImage(file='../img/io_on.png')
self.btnServiceIo = ttk.Button(
    top_buttons_frame,
    text="Usługa automatyczna",
    image=self.ioBtnImg_off,
    compound=tk.LEFT,
    width=30,
    style='service-io.TButton' # use dedicated style
    )