我正在尝试更改为 ttk Combobox 的弹出列表的宽度。设置 Combobox 的宽度也会改变 Listbox 的宽度,使部分值不可读。
我在 Tk/Tcl 中阅读 了这个解决方案,但我不熟悉这种语言,想用 Python 解决问题。我尝试更改主题参数,但似乎无济于事。下面是一段示例代码。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("testing the combobox")
root.geometry('300x300+50+50')
fruit = ['apples are the best', 'bananas are better']
c = ttk.Combobox(root, values=fruit, width=10)
c.pack()
# Trying to change the width, does not work
c.option_add("*TCombobox*Listbox*Width", 50)
root.mainloop()
这里有人可以帮助我或给我一些指示吗?
原文由 Raoul Collenteur 发布,翻译遵循 CC BY-SA 4.0 许可协议
patthoyts 的详细回答是使用派生样式而不是修改
TCombobox
样式来获得通用解决方案(但要注意 Tk 错误,稍后会详细介绍)。基本上,为每个组合框创建一个具有唯一名称的新样式(我不知道这如何扩展 - 也许只在需要的地方应用它更安全)。此外,组合框值是从小部件本身读取的,并且取最长的一个:如果插入短文本,还有一个检查以避免使弹出窗口小于小部件。
但…
如前所述,Tk Combobox 中存在一个错误:
postoffest
属性只能从TCombobox
样式中读取,而不是从派生样式中读取。这可以通过编辑
[python-install-dir]\tcl\tk[version]\ttk\combobox.tcl
来修复;在 PlacePopdown 方法中找到这一行:并将其替换为:
或者,等待我的 拉取请求 被合并和发布。