Python 3.x 基于变量tkinter python 3.6设置列表框的值

Python 3.x 基于变量tkinter python 3.6设置列表框的值,python-3.x,function,tkinter,listbox,spyder,Python 3.x,Function,Tkinter,Listbox,Spyder,Python 3.6、Spyder、Tkinter 嗨,我有一些代码,在一个函数中。在代码顶部循环后,我在代码底部得到两个列表框选择,我想切换这两个值 两个列表框都填充了相同的数据 因此,假设我在第一个列表框中选择1新西兰元,在第二个列表框中选择2美元,然后在我完成计算后,进行一些代码计算,我想将两个列表框的活动选择更改为1美元和2新西兰元 因此,当.after循环回到开始时 cur1 = listbox1.get('active') cur2 = listbox2.get('active')

Python 3.6、Spyder、Tkinter

嗨,我有一些代码,在一个函数中。在代码顶部循环后,我在代码底部得到两个列表框选择,我想切换这两个值

两个列表框都填充了相同的数据

因此,假设我在第一个列表框中选择1新西兰元,在第二个列表框中选择2美元,然后在我完成计算后,进行一些代码计算,我想将两个列表框的活动选择更改为1美元和2新西兰元

因此,当.after循环回到开始时

cur1 = listbox1.get('active')
cur2 = listbox2.get('active')
它得到正确的切换值

目前我试过了

cur1prev = cur1
cur2prev = cur2

cur1 = cur2prev
cur2 = cur1prev
listbox1.set(cur1)
listbox.set(cur2)

root.after(3000, #function for button)
有没有一个简单的方法可以做到这一点,我认为这与它们的索引值有关

这是全部功能

谢谢

根据要求添加了一个基本示例

import tkinter as tk


#Make Window
root = tk.Tk()
root.geometry("612x417")
root.title("Exchange Rates")
root.resizable(0,0)
root.configure(background='lightgrey')

def printsels():
    sel1 = lb1.get('active')
    sel2 = lb2.get('active')
    print (sel1, sel2)
    lb1.select_set(sel2)
    lb2.select_set(sel1)

    root.after(3000, printsels)

lb1 = tk.Listbox(root, font="bold", height=3, width=8)
lb2 = tk.Listbox(root, font="bold", height=3, width=8)

for i in range (10):
    i = i + 1
    lb1.insert("end", i)
    lb2.insert("end", i)

lb1.pack()
lb2.pack()

btn = tk.Button(root, text="Get selections", command=printsels)
btn.pack()

root.mainloop()
当循环时,输出仍然是我首先选择的内容。

已解决

在循环开始时使用

index1 = listbox1.get(0, "end").index(cur1)
index2 = listbox2.get(0, "end").index(cur2)
listbox1.activate(index2)
listbox2.activate(index1)
在循环结束时使用

index1 = listbox1.get(0, "end").index(cur1)
index2 = listbox2.get(0, "end").index(cur2)
listbox1.activate(index2)
listbox2.activate(index1)
最后的代码是

def results():
    if running:
        global usraccbal
        cur1 = listbox1.get('active')
        cur2 = listbox2.get('active')

        index1 = listbox1.get(0, "end").index(cur1)
        index2 = listbox2.get(0, "end").index(cur2)

        print (index1,index2)

        frmcur_text.set(cur1)
        tocur_text.set(cur2)

        t = datetime.utcnow()  
        lbldatetime_text.set(t)


#get usr input of text box for amount to trade    this is trade 1
        usraccbal = Decimal (cnvrtamt.get())


#Get rates and assign  their values to variables rate1contents and rate2contents then print

        var1 = getrates(cur1, cur2)
        var2 = (var1[0])
        var3 = (var1[1])
        rate1contents = Decimal (var2)
        rate2contents = Decimal (var3)
        #print the exrates
        print ('currency1',cur1,' to currency2', cur2, '=',rate1contents)
        print ('currency2',cur2,' to currency1', cur1, '=',rate2contents)

#Do trade number 1 giving result as a variable cnvrt
        #Do trade number 1 as a variable 
        c = newconvert(usraccbal, rate1contents)
        #unpack values from trade1 variable for use in other calculations
        newcnvrt = Decimal (c[0])
        prevusraccbal = Decimal (c[1])
        #make variable calle cnvrt with result of newconvert function
        cnvrt = newcnvrt
        #Print the result of trade 1 and the previous accbal/amount converted
        print ('#1 Trade =',cur2, 'newaccbal', newcnvrt,'previous account balance =', prevusraccbal,)

#Update tk labels for result of converted amount and which currency we converted to
        lblconvertedamtval_text.set(newcnvrt)
        lblconvertedcur_text.set(cur2)
#Update tk labels for previous currency data        
        lblprevcur_text.set(cur1)
        lblprevcuramt_text.set(prevusraccbal)
#set user account balance again
        usraccbal = newcnvrt
        cnvrtamt.set(usraccbal)
        #Attempt to trade back to cur1
        #Store old country codes
        cur1prev = cur1
        cur2prev = cur2
#       Store previous amount that was converted
        cnvrtamtprev = Decimal (prevusraccbal)
#Store old conversion result    
        cnvrtresultprev = Decimal (newcnvrt)
#Do trade back
        cur1 = cur2prev
        cur2 = cur1prev
        listbox1.activate(index2)
        listbox2.activate(index1)
        print ('new cur1 =', cur1, 'new cur2 =',cur2)


        root.after(3000,results)

请不要链接到其他网站上的代码。Intead,创建一个。不清楚您想要什么,所以一个显示两个列表框的最小程序和足以说明您的问题的代码将增加您获得有用答案的机会。好的,按要求完成