Python I';我很难找到执行命令的按钮。(特金特)
我正在制作一个选择你自己的冒险游戏,我正在尝试创建一个系统,其中有一个全局布尔值,它在真与假之间切换,以指示玩家下一步要去哪里。此外,我将使用条件来指示事件的逻辑和流,为了使逻辑等待GUI,我还添加了一个“count”变量,每次单击按钮时该变量递增1,并使其变为仅当计数大于0时逻辑才会运行。然而,当我创建这两个函数并将它们设置为按钮的命令时,它们在我实际按下按钮之前一直在执行。代码如下:Python I';我很难找到执行命令的按钮。(特金特),python,python-3.x,user-interface,tkinter,Python,Python 3.x,User Interface,Tkinter,我正在制作一个选择你自己的冒险游戏,我正在尝试创建一个系统,其中有一个全局布尔值,它在真与假之间切换,以指示玩家下一步要去哪里。此外,我将使用条件来指示事件的逻辑和流,为了使逻辑等待GUI,我还添加了一个“count”变量,每次单击按钮时该变量递增1,并使其变为仅当计数大于0时逻辑才会运行。然而,当我创建这两个函数并将它们设置为按钮的命令时,它们在我实际按下按钮之前一直在执行。代码如下: def ButA() : global count count += 1 Decis
def ButA() :
global count
count += 1
Decision = True
def ButB() :
global count
count += 1
Decision = False
# GUI:
if Player == 0 :
root = tkinter.Tk()
canvas = tkinter.Canvas(root, width=960, height=720)
image = ImageTk.PhotoImage(Image.open('TitleScreen.png'))
canvas.create_image(0, 0, anchor=tkinter.NW, image=image)
textbox = canvas.create_text(485, 375, font=("Times", 25, 'bold'),
text='Welcome, press A to proceed, press B to quit [a/b]', fill='white',
justify='center')
opt1 = Button(root, text='A', command=ButA(), bg='black', bd=5, font=('Times', 20), activebackground='blue',
activeforeground='black', fg='black')
opt1.place(x=435, y=465)
opt2 = Button(root, text='B', bg='black', bd=5, font=('Times', 20), activebackground='blue',
activeforeground='black', fg='black', command=ButB())
opt2.place(x=485, y=465)
决策的值设置为进一步向上,计数的值设置为0。每当我运行脚本时,我看到数字2出现在屏幕中间,这表明我在某种程度上没有按下按钮时的反应,每当我运行脚本时,它都执行这两个函数,然后只给我结果。我做错了什么?在创建按钮时将命令绑定到按钮时,请尝试以下操作:
command=labmda: ButA()
否则,按钮一创建就调用函数。您不需要括号,只需使用
command=ButA
而不是command=ButA()
。否则,它将根据按钮的定义立即调用该函数
opt1 = Button(root, text='A', command=ButA, bg='black', bd=5, font=('Times', 20), activebackground='blue',
activeforeground='black', fg='black')
# [...]
opt2 = Button(root, text='B', bg='black', bd=5, font=('Times', 20), activebackground='blue',
activeforeground='black', fg='black', command=ButB)
非常感谢你!这成功了!如果你不介意我再问一个问题,我想根据决策的价值设置一系列条件,以取代屏幕上的文本,你知道我该怎么做吗?很抱歉问了这么多问题。编辑:解决了我的一个问题,所以我删除了它。我假设您显示的文本是标签或文本小部件。所做的决定是通过按下按钮来表达的,对吗?然后,您可以绑定一个函数,删除按钮上的标签/文本小部件并绘制一个新的标签/文本小部件,或者您可以读取按下按钮时更改的StringVar。另外,我也希望能投赞成票:)谢谢,我会试试的。所以我应该想做一个函数来创建一个新的文本框,我应该把它放到按钮上?有没有一种方法可以在保持条件格式的同时仍然这样做?我只是想知道,用这种方法组织分支路径很困难。我也很愿意,但我的声誉不到15,所以堆栈溢出不允许我,非常抱歉:(我不完全理解你的目标是什么,如果这是普遍适用的话,也许可以提出一个新问题。哦,好的,我会这样做,谢谢!