2013-10-02 19 views
9

Tiện ích tùy chọn ttk bắt đầu bằng tất cả giá trị của nó trong menu thả xuống. Khi chọn bất kỳ giá trị nào, giá trị đầu tiên trong danh sách biến mất, không bao giờ xuất hiện trở lại ...tùy chọn đầu tiên tùy chọn tkinter biến mất

Có ai biết tại sao không? Đây có phải là một tính năng của thiết kế widget không? Hãy thử nó với những điều sau:

import tkinter.ttk as ttk 
import tkinter as tk 

a = tk.Tk() 

options = ['1', '2', '3'] 
value = tk.StringVar() 

masterframe = ttk.Frame() 
masterframe.pack() 

dropdown = ttk.OptionMenu(masterframe, value, *options) 
dropdown.pack() 

a.mainloop() 

Note - một người dùng khác hỏi cùng một câu hỏi ở đây: OptionMenu won't show the first option when clicked (Tkinter)

Họ dường như to've tìm thấy một workaround, nhưng không hiểu tại sao nó đã xảy ra.

CẬP NHẬT: thực tế hành vi này chỉ xuất hiện khi sử dụng tiện ích ttk. Các widget tk hoạt động tốt (mặc dù nhìn rất xấu xí).

Trả lời

1

Dường như với ttk.OptionMenu mục đầu tiên trong danh sách tùy chọn phải được để trống:

import tkinter.ttk as ttk 
import tkinter as tk 

a = tk.Tk() 

options = ['', '1', '2', '3'] 
value = tk.StringVar() 
value.set(options[1]) 

masterframe = ttk.Frame() 
masterframe.pack() 

dropdown = ttk.OptionMenu(masterframe, value, *options) 
dropdown.pack() 

a.mainloop() 

Nguồn: http://www.pyinmyeye.com/2012/08/tkinter-menubutton-demo.html

+0

Liên kết đó dường như đã chết. –

+2

Trong khi cách giải quyết của bạn hoạt động, nó không phải là một mô tả rất tốt về vấn đề này. 'ttk.OptionMenu' mong đợi một giá trị mặc định sau đối số biến và trước danh sách các giá trị. Trong khi giải pháp của bạn hoạt động, nó che khuất những gì đang thực sự xảy ra. –

19

Chữ ký của lệnh ttk.OptionMenu là thế này:

def __init__(self, master, variable, default=None, *values, **kwargs): 

Đây là docstring:

"" "Xây dựng tiện ích OptionMenu theo chủ đề với cha mẹ, giá trị văn bản tài nguyên được đặt thành biến, giá trị được chọn ban đầu được chỉ định bởi tham số mặc định, giá trị menu được cung cấp bởi * giá trị và từ khóa bổ sung.

Lưu ý tùy chọn default xuất hiện trước danh sách giá trị. Thay vì thêm một mục trống vào danh sách giá trị, hãy thêm bất kỳ giá trị nào bạn muốn làm mặc định:

options = ['1', '2', '3'] 
dropdown = ttk.OptionMenu(masterframe, value, options[1], *options) 
+5

haha, tuyệt vời, bạn đã thêm một câu trả lời hay cho câu hỏi 1 tuổi chính xác 4 giờ trước khi tôi cần điều đó. – Gregor

Các vấn đề liên quan