2013-05-13 35 views
5

Tôi đã thêm một tiện ích OptionMenu vào mã của mình và chỉ định danh sách làm tùy chọn. Đây là cách thực hiện:OptionMenu sẽ không hiển thị tùy chọn đầu tiên khi được nhấp (Tkinter)

z = StringVar() 
z.set(userList[0])  
usersOption = OptionMenu(frame1, z, *userList)#, command=changeUser) 
usersOption.pack(side=RIGHT, padx=3) 

Bây giờ, tôi nghĩ nó sẽ hiển thị tất cả các tùy chọn trong danh sách được nêu. Như vậy:

Option 1 \/ <-- the box with the selected option 
Option 1 }\__the options that show on click 
Option 2 }/ 

nhưng nó thực sự chỉ cho thấy sự lựa chọn thứ hai, và khi tôi chọn nó có nghĩa là, về cơ bản, không có cách nào trở lại, nếu tôi nhấp vào hộp một lần nữa nó tiếp tục chỉ hiển thị tùy chọn 2 và tôi có thể không thay đổi nó ngay cả với các phím lên và xuống. Tôi đã thử tìm kiếm giải pháp, nhưng tôi không tìm được nơi nào, vì vậy tôi bắt đầu nghĩ đó là cách hoạt động mặc định của tiện ích, nhưng tôi không thấy gì để chỉ cho tôi cách giải quyết nó trong tài liệu tôi đã đọc.
P .: Tôi đang sử dụng Python 3.3

+0

là 'z' một thể hiện của Tkinter' StringVar'? Bạn có chắc chắn rằng 'userlist' có giá trị mà bạn nghĩ rằng nó có? –

+0

có, nó là và có, nó có. Danh sách được tạo từ một dòng của tệp txt mà không có bộ ngắt dòng '\ n' (vì tôi sử dụng .strip()). Tệp văn bản này hiện có hai dòng: "Người dùng 1" và "Người dùng 2". Và nó được đặt thành userList [0]. (Tôi sẽ chỉnh sửa văn bản để thêm nội dung này) – AugustoQ

Trả lời

1

Đừng bận tâm, tôi đã tắt số *userList và sử dụng vòng lặp for để chèn các mục dưới dạng lệnh. Bây giờ nó hoạt động tốt.
Mã này tôi đã sử dụng:

for user in userList: 
    usersOption["menu"].insert("end", "command", label=user, command=_setit(z, user, changeUser)) 
6

tôi đã cùng một vấn đề và nó đã làm tôi phát điên, vì vậy tôi nhìn vào source. Tôi nghĩ rằng vấn đề là đối số constructor 3 là giá trị mặc định. Nếu bạn không chỉ định nó trước * userList, có vẻ như nó lấy mục đầu tiên làm giá trị mặc định. Một sửa chữa thực sự sẽ là một cái gì đó như:

z = StringVar() 
z.set(userList[0])  
usersOption = OptionMenu(frame1, z, userList[0] ,*userList)#, command=changeUser) 
usersOption.pack(side=RIGHT, padx=3) 
+0

Có. Như đã trả lời trong [câu hỏi này] (https://stackoverflow.com/questions/19138534/tkinter-optionmenu-first-option-vanishes) – Kalissar

3

Cuối câu trả lời ..

Chỉ cần sử dụng

self.option = OptionMenu(PARENT, VALUE TO BE CHANGED, "DEFAULT TEXT", *OPTIONS_ARRAY/LIST) 

trình hoàn hảo cho tôi.

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