Python tkinter函数中的if语句未正确设置变量

0 python if-statement tkinter function python-3.x

下面的代码是计算我正在进行的纸牌游戏得分手的积分.我的问题与我的Round_Points函数中的if/elif语句有关.每当我运行代码时,Trick_Base仅从最后的else语句设置为878(我选择测试的随机数),即使我在GUI中为Tricks_Bid输入6到10之间的值(我正在使用tkinter) Python 3.4).我是否需要添加一些内容以确保将Trick_Base设置为if语句中的适当值?或者我的条目小部件中有什么东西可以关闭吗?到目前为止,我搜索过的任何内容都没有给我任何关于错误的线索.在此先感谢您的任何帮助或建议!

PS:我的代码基于这个示例计算器:http ://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()
Run Code Online (Sandbox Code Playgroud)

Bri*_*ius 5

两个问题.

问题一:

首先指定一个IntVarto Tricks_Bid,然后通过指定Entryto来覆盖它Tricks_Bid.

解:

重命名您尝试引用IntVar类似内容的所有情况Tricks_Bid_Var.

问题二:

Round_Points,您试图将an IntVar和整数与==运算符进行比较.这不会给你你期望的结果.一个整数永远不会是==一个IntVar.您需要调用该get函数来获取包含在其中的整数值IntVar.

解:

代替

  if Tricks_Bid_Var == 10:
        Trick_Base = 400
Run Code Online (Sandbox Code Playgroud)

做这个:

  if Tricks_Bid_Var.get() == 10:
        Trick_Base = 400
Run Code Online (Sandbox Code Playgroud)