【问题标题】:Python Tkinter Button - Justify/Anchor text/label and icon separatelyPython Tkinter 按钮 - 分别对齐/锚定文本/标签和图标
【发布时间】:2020-10-14 23:26:41
【问题描述】:

我正在开发一个需要菜单列表的 Tkinter 应用程序。

我创建了一个包含文本标签和图标的按钮列表。

我可以成功地将文本对齐并将其锚定到左侧(West),以便文本很好地排列。

不幸的是,由于菜单有不同长度的单词,图标正好在最后,没有排成一行。

Tkinter 按钮中是否有一种方法可以将文本与图标分开来对齐和锚定?所以文本/标签可以在西方,图标可以在右边,所以菜单列表中的所有内容都排成一行。

【问题讨论】:

  • 也许先得到这些单词长度的最大值。然后用空格填充那些不是最长的单词?

标签: python button tkinter


【解决方案1】:

一个简单的方法是先获得最大的单词长度。然后用空格填充不是最长的单词。不知道这是否是最好的方法。喜欢:

import tkinter as tk

root = tk.Tk()
img = tk.PhotoImage(file="xxxx")

textList = ["open", "setting", "close"]
maxLength = max(map(len, textList)) # get the maximum of length

for i in textList:
    btn = tk.Button(root, text=i.ljust(maxLength), font=("Consolas",10),image=img, compound=tk.RIGHT)
    btn.pack()
root.mainloop()

PS:您需要使用等宽字体,并确保您的图标大小相同。如果没有,请考虑使用PIL.Image.resize()

【讨论】:

  • 谢谢,我会试试看!这就是ljust 在做什么?
  • @DjangoBlockchain 这将使那些短字符串充满空格。
  • 我试过了,但效果不太好,我想我需要做的是在每个单词上做一个不同的ljust,以便它们加在一起。所以一个 15 长度的词和一个 2 长度的词可能只是到 20。所以 15 长度的词有 +5,而 2 长度的词有 +18。
  • @DjangoBlockchain 当然,它应该像那样工作。你的代码是什么?。
  • 我取一个随机常数,比如 20,然后我取每个单词的长度并从 20 中减去它。然后我使用 ljust 那个数量。所以 10 个字母的单词是 ljust 乘 10,2 个字母的单词是 ljust 乘 18。这似乎让它们更接近,但不像我希望的那样完全内联。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 2017-08-29
  • 2018-05-22
  • 2017-08-28
  • 2016-02-03
  • 2013-07-02
相关资源
最近更新 更多