首页 > 解决方案 > 将变量传递给Python中的另一个变量,tkinter

问题描述

我想传递水果的值,以便我可以打印它,就像选择了your fruit is apple苹果一样,your fruit is apple orange如果两者都选择了。也许我应该使用数组?

from tkinter import *
from tkinter import ttk
import tkinter as tk

app = tk.Tk()

def show():
    fruit=""
    if apple.get()==1:
        fruit = "apple"
    if orange.get()==1:
        fruit = "orange"
    
    msg = "your fruit is %s"%fruit
    print(msg)

Label(app, text="fruit selected").grid(row=4,column=0, sticky=W)
apple = IntVar()
Checkbutton(app, text="apple", variable=apple,command = show).grid(row=4,column=1, sticky=W)
orange = IntVar()
Checkbutton(app, text="orange", variable=orange).grid(row=4,column=2, sticky=W)


#size
app.title('Basic message')
app.geometry("700x500")

app.mainloop()

标签: pythontkinter

解决方案


可以有很多方法可以做到这一点,但让我们先在你的例子中做到这一点。只需添加一行并对您的show功能进行一些改进,您就会得到想要的结果。

def show():
    fruit=""
    if apple.get() and orange.get():
        fruit = 'apple orange' 
    elif apple.get():
        fruit = "apple"
    elif orange.get():
        fruit = "orange"

    msg = "your fruit is %s"%fruit
    print(msg)

但是可以改进整个代码,使用 for 循环创建不同的 fruitsCheckbutton并将它们的变量保存IntVarvar它们的实例中,这将便于以后访问,最后将这些 Checkbuttons 保存在列表中以便在show函数中访问它们。逻辑很简单,我只是检查勾选了哪个检查按钮并将它们的文本添加到fruit变量中。

from tkinter import *
from tkinter import ttk
import tkinter as tk

app = tk.Tk()
ckb_list = []

def show():
    f = ''
    for ckb in ckb_list:
        if ckb.var.get():
            f += ckb['text'] + ' '
    msg = "your fruit is %s"%f
    print(msg)

Label(app, text="fruit selected").grid(row=4,column=0, sticky=W)

for col, fruit in enumerate(('apple', 'orange', 'banana', 'mango')):
    ckb = Checkbutton(app, text=fruit, command=show)
    ckb.var = ckb['variable'] = IntVar()
    ckb.grid(row=4,column=col+1, sticky=W)
    ckb_list.append(ckb)

#size
app.title('Basic message')
app.geometry("700x500")

app.mainloop()

推荐阅读