Получение значения из комбобокса Tkinter - PullRequest
0 голосов
/ 29 мая 2019

В конце концов, я хочу использовать значения в выпадающих списках в качестве параметров в других функциях, но я думаю, что если я смогу просто заставить их печатать сейчас, этого будет достаточно для построения. Вот что у меня есть.

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 (), это все равно не сработает.

1 Ответ

1 голос
/ 29 мая 2019

В вашем коде есть две вещи, которые нужно исправить.Сначала давайте сосредоточимся на 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
    ...

Также я хочу отметить, что если вы просто хотите получить значения в выпадающем списке, вам не нужно создавать два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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...