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

0 投票
1 回答
1256 浏览
提问于 2025-04-18 09:04

下面的代码是我正在开发的一个卡牌游戏计分器,用来计算得分。我想问的是,在我的 Round_Points 函数里面的 if/elif 语句。每次我运行代码时,Trick_Base 这个变量总是被设置为 878(这是我随便选的一个数字来测试),即使我在图形界面中输入的 Tricks_Bid 值在 6 到 10 之间(我在用 Python 3.4 的 tkinter)。我需要添加什么东西来确保 Trick_Base 能从 if 语句中得到正确的值吗?或者说我的输入框可能有什么问题?到目前为止,我查找的内容都没有给我任何线索,帮帮我吧!

附注:我的代码是基于这个示例计算器的: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()

1 个回答

5

有两个问题。

问题一:

你首先把一个 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

撰写回答