2014-09-23 163 views
4

我已經創建了Tkinter的一個OptionMenu,列長爲2.但是,下拉列表/菜單與寬度不匹配,所以看起來不太好。任何想法如何匹配他們的寬度?Python Tkinter:OptionMenu修改下拉列表的寬度

self.widgetVar = StringVar(self.top) 
choices = ['', 'wire', 'register'] 
typeOption = OptionMenu(self.top, self.widgetVar, *choices) 
typeOption.grid(column = 0, columnspan = 2, row = 0, sticky = 'NSWE', padx = 5, pady = 5) 

回答

-1

這是舊的,但希望答案仍然有幫助。

N S W E的粘性選項是tkinter包的一部分。所以他們不應該被引用。嘗試

typeOption.grid(column = 0, columnspan = 2, row = 0, sticky = N+S+W+E, padx = 5, pady = 5) 

這是「從Tkinter的進口*」較爲明顯,如果不是你有

import tkinter as tk 
typeOption.grid(column = 0, columnspan = 2, row = 0, sticky = tk.N+tk.S+tk.W+tk.E, padx = 5, pady = 5) 

然後,只需確保列未通過與框架的columnconfigure功能MINSIZE工作萎縮。

**注有到Tkinter的像NSEW的參數還內置了其他組合而不是NSWE

+0

此答案與下拉菜單無關,這是問題的問題。 – 2015-10-27 12:23:54

+1

使用該字符串也起作用。 'tk.N =='n''等 – Justin 2016-09-23 17:32:00

2

有沒有辦法改變的下拉列表的寬度。

你可能想考慮ttk.Combobox小部件。它有不同的外觀,可能是你正在尋找的。

0

一個想法是用空格填充右側(或左側或兩側)。然後,當您需要選定的值時,將其與strstrip分開。不是很好,但總比沒有好。

from tkinter import ttk 
import tkinter as tk 

root = tk.Tk() 

def func(selected_item): 
    print(repr(selected_item.strip())) 

max_len = 38 
omvar = tk.StringVar() 
choices = ['Default Choice', 'whoa', 'this is a bit longer'] + ['choice'+str(i) for i in range(3)] 
padded_choices = [x+' '*(max_len-len(x)) for x in choices] 
om = ttk.OptionMenu(root, omvar, 'Default Choice', *padded_choices, command=func) 
om.config(width=30) 
om.grid(row=0, column=0, padx=20, pady=20, sticky='nsew') 

root.mainloop()