WedX - журнал о программировании и компьютерных науках

Переменная неправильно задана оператором if в функции Python tkinter

Приведенный ниже код предназначен для подсчета очков для карточной игры, над которой я работаю. Мой вопрос связан с оператором if/elif внутри моей функции Round_Points. Всякий раз, когда я запускаю код, Trick_Base устанавливается только на 878 (просто случайное число, которое я выбрал для проверки) из последнего оператора else, даже когда я ввожу значение от 6 до 10 для Tricks_Bid в графическом интерфейсе (я использую tkinter в Питон 3.4). Нужно ли мне что-то добавить, чтобы убедиться, что для Trick_Base задано соответствующее значение из оператора if? Или может быть что-то не так в моем виджете входа? Ничто из того, что я искал до сих пор, не дало мне ни малейшего представления о том, что не так. Заранее спасибо за любую помощь или предложения!

PS: я основывал свой код на этом примере калькулятора: https://www.tkdocs.com/tutorial/firstexample.html Проблемы начались, когда я начал добавлять операторы if и elif.

from tkinter import *
from tkinter import ttk

def Round_Points():
    if Tricks_Bid == 10:
        Trick_Base = 400
    elif Tricks_Bid == 9:
        Trick_Base = 300
    elif Tricks_Bid == 8:
        Trick_Base= 200   
    elif Tricks_Bid == 7:
        Trick_Base = 100    
    elif Tricks_Bid == 6:
        Trick_Base = 90   
    else:
        Trick_Base=878

    global Suit_Base

    Points.set(Trick_Base+Suit_Base)

root = Tk()
root.title("Tricks")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

Points = IntVar()
Suit_Base = 80
Tricks_Bid=IntVar()
Trick_Base=IntVar()

Tricks_Bid = ttk.Entry(mainframe, width=7, textvariable=Tricks_Bid)
Tricks_Bid.grid(column=2, row=1, sticky=(W, E))

ttk.Label(mainframe, textvariable=Points).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=Round_Points).grid(column=3, row=3, sticky=W)

ttk.Label(mainframe, text="Tricks").grid(column=3, row=1, sticky=W)
#ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="Points").grid(column=3, row=2, sticky=W)

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

Tricks_Bid.focus()
root.bind('<Return>', Round_Points)

root.mainloop()

Ответы:


1

Две проблемы.

Проблема первая:

Сначала вы назначаете IntVar для Tricks_Bid, а затем перезаписываете это, назначая Entry для Tricks_Bid.

Решение:

Переименуйте все случаи, когда вы пытаетесь сослаться на IntVar, например, Tricks_Bid_Var.

Проблема вторая:

В Round_Points вы пытаетесь сравнить IntVar и целое число с помощью оператора ==. Это не даст вам ожидаемого результата. Целое число никогда не будет от == до IntVar. Вам нужно вызвать функцию get, чтобы получить целочисленное значение, содержащееся в IntVar.

Решение:

Вместо

  if Tricks_Bid_Var == 10:
        Trick_Base = 400

сделай это:

  if Tricks_Bid_Var.get() == 10:
        Trick_Base = 400
08.06.2014
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]