我創建了一個組合框回圈,并將我所做的選擇附加到串列中。有 3 個組合框。該串列必須有 3 個相應的元素。問題是,如果我在選擇和替換選項時改變主意,串列(當然)會增加。在這段代碼中,我有 3 個選項:'The One!'、'more or less'、'the bad'。我想在選擇期間更改選項,但始終保留串列中與組合框數量相對應的 3 個唯一元素。我已經考慮過使用 set 但沒有用,因為實際回圈很大。
我需要的串列只包含 len 的組合框,結果對應于最后的選擇,與我所做的選擇更改的數量無關。
感謝您的任何幫助。
from tkinter import ttk
from tkinter import Tk
from tkinter import Button
root = Tk()
my_heroes = ['Zidane', 'Ronaldo', 'Messi']
position = ['The One!', 'more or less','the bad']
result =[]
def get_combo_choice(event, cmb):
result.append(cmb.get())
print(result)
for index, heroe in enumerate(my_heroes):
var = StringVar()
bestPlayers = ttk.Combobox(root,values=position, textvariable=var, state="readonly")
bestPlayers.grid(row=0 index, column=1,padx=(15,25))
label = Label(root, text = heroe)
label.grid(row=0 index, column=0,padx=(15,25))
bestPlayers.bind("<<ComboboxSelected>>",lambda event, cmb=var:get_combo_choice(event, cmb))
button = Button(root, text ="get list of choices", command = callback)
button.grid(row=4, column=0,padx=(15,25))
root.mainloop()
列印增長到三個,好的,但然后繼續......我需要保持串列的大小 = 組合框 len 并自由更新最后獲得最后 3 個選擇的值。
['唯一的那個!']
['The One!', '或多或少']
['那個!','或多或少','壞']
['那個!'、'或多或少'、'壞的'、'那個!']
['The One!', 'more or less', 'the bad', 'The One!', 'more or less']
['一個!','或多或少','壞','唯一!','或多或少','唯一!']
['一個!','或多或少','壞','唯一!','或多或少','唯一!','或多或少']
['The One!', 'more or less', 'the bad', 'The One!', 'more or less', 'The One!', 'more or less', 'more or less']
uj5u.com熱心網友回復:
您可以通過使用串列切片來限制串列長度。
def get_combo_choice(event, cmb):
global result
result.append(cmb.get())
# limit list len to 3 using ~2
result = result[~2:]
print(result)
為了控制result列,需要將一些內容添加到您的代碼中。
result =[None, None, None]
best = []
# Here's the alternative
def get_combo_choice(event, cmb):
i = best.index(event.widget)
result[i] = cmb.get()
print(result)
在 for\loop 內插入 best.append(bestPlayers)
uj5u.com熱心網友回復:
德里克先生 我用你的回答更新了我的代碼。它就像一個魅力!你教會了我很多,非常感謝!
import tkinter as tk
from tkinter import ttk
from tkinter import Tk
from tkinter import Button
root = Tk()
my_heroes = ['Zidane', 'Ronaldo', 'Messi']
position = ['The One!', 'more or less','the bad']
# result =[]
# def get_combo_choice(event, cmb):
# result.append(cmb.get())
# print(result)
result =[None, None, None]
best = []
# Here's the alternative
def get_combo_choice(event, cmb):
i = best.index(event.widget)
result[i] = cmb.get()
print(result)
for index, heroe in enumerate(my_heroes):
var = tk.StringVar()
bestPlayers = ttk.Combobox(root,values=position, textvariable=var, state="readonly")
best.append(bestPlayers)
bestPlayers.grid(row=0 index, column=1,padx=(15,25))
label = tk.Label(root, text = heroe)
label.grid(row=0 index, column=0,padx=(15,25))
bestPlayers.bind("<<ComboboxSelected>>",lambda event, cmb=var:get_combo_choice(event, cmb))
button = tk.Button(root, text ="get list of choices", command = get_combo_choice)
button.grid(row=4, column=0,padx=(15,25))
root.mainloop()
代碼結果:
['那個!',無,無]
['那個!',無,無]
['那個!',無,無]
['The One!', '或多或少', 無]
['那個!','或多或少','壞']
uj5u.com熱心網友回復:
最后一個問題:在:def get_combo_choice(event, cmb):
我理解事件(選擇--> 例如:“那個”),
cbm(--> 變數),結果使用索引從最佳(串列)中獲得選擇,
我不明白的是為什么我不能使用 i = best.index() 如果 best 是我們已經知道的串列。什么是 (event.widget) 以及它在那里做什么?順便說一下,您的代碼符合我的所有需求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/358529.html
上一篇:在組合框中查看連接在一起并由連字符分隔的資料庫的內容
下一篇:如果有def作業,如何禁用按鈕?
