从Tkinter组合框中检索值

2024-09-29 19:21:10 发布

您现在位置:Python中文网/ 问答频道 /正文

最后,我想使用组合框中的值作为其他函数中的参数,但我想如果我现在就可以打印它们,那就足够了。这是我目前掌握的情况。你知道吗

import tkinter as tk
from tkinter import ttk
import time

def ok():
    betType = betTypeVar.get()
    season = seasonVar.get()
    print(betType, season)

def CreateSimPreviousSeasonWindow():

    prevSeasonWindow = tk.Tk()

    #============= Bet Type Input =============#
    betTypeVar = tk.StringVar()

    betTypeLabel = tk.Label(prevSeasonWindow, text="Bet type:").grid(row=0,column=0)
    betTypeChosen = ttk.Combobox(prevSeasonWindow, values=['Moneyline','Total'])
    betTypeChosen.grid(row=0, column=1)

    seasonVar = tk.StringVar()
    seasonLabel = tk.Label(prevSeasonWindow, text='Season:').grid(row=1, column=0)
    seasonChosen = ttk.Combobox(prevSeasonWindow, values=['2018', '2017'])
    seasonChosen.grid(row=1,column=1)

    button = tk.Button(prevSeasonWindow, text='OK', command=ok)
    button.grid(row=2,column=0)

    prevSeasonWindow.mainloop()

这让我

  File "C:[directory...]", line 6, in ok
    betType = betTypeVar.get()
NameError: name 'betTypeVar' is not defined

在我看来,这个错误很明显是因为ok()没有任何参数传递给它,所以它不知道“betTypeVar”是什么,但是我读过的所有教程都是这样做的,所以我遗漏了一些东西。如果我真的尝试传递ok()参数,它仍然不起作用。你知道吗


Tags: textimport参数gettkinterdefcolumnok
1条回答
网友
1楼 · 发布于 2024-09-29 19:21:10

在代码中有两件事需要修正。首先让我们关注CreateSimPreviousSeasonWindow

betTypeVar = tk.StringVar()
seasonVar = tk.StringVar()

您定义了两个StringVar,但实际上从未使用它或将它们链接到combobox对象。正确的方法是将它们设置为textvaraible

betTypeChosen = ttk.Combobox(prevSeasonWindow, textvariable=betTypeVar, values=['Moneyline','Total'])
seasonChosen = ttk.Combobox(prevSeasonWindow, textvariable=seasonVar, values=['2018', '2017'])

接下来,NameError: name 'betTypeVar' is not defined是因为变量是局部变量。您正在尝试跨不同函数访问同一变量。要传递它们,需要声明global

def ok():
    global betTypeVar, seasonVar
    betType = betTypeVar.get()
    season = seasonVar.get()
    print(betType, season)

def CreateSimPreviousSeasonWindow():
    global betTypeVar, seasonVar
    ...

我还想指出,如果您只想检索combobox的值,那么实际上不需要创建两个StringVar。只是combobox.get()已经足够好用了。你知道吗

import tkinter as tk
from tkinter import ttk
import time

def ok():
    global betTypeChosen, seasonChosen
    print (betTypeChosen.get(), seasonChosen.get())

def CreateSimPreviousSeasonWindow():
    global betTypeChosen,seasonChosen

    prevSeasonWindow = tk.Tk()

    #============= Bet Type Input =============#

    betTypeLabel = tk.Label(prevSeasonWindow, text="Bet type:").grid(row=0,column=0)
    betTypeChosen = ttk.Combobox(prevSeasonWindow,values=['Moneyline','Total'])
    betTypeChosen.grid(row=0, column=1)

    seasonLabel = tk.Label(prevSeasonWindow, text='Season:').grid(row=1, column=0)
    seasonChosen = ttk.Combobox(prevSeasonWindow, values=['2018', '2017'])
    seasonChosen.grid(row=1,column=1)

    button = tk.Button(prevSeasonWindow, text='OK', command=ok)
    button.grid(row=2,column=0)

    prevSeasonWindow.mainloop()

CreateSimPreviousSeasonWindow()

相关问题 更多 >

    热门问题