Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python I';我很难找到执行命令的按钮。(特金特)_Python_Python 3.x_User Interface_Tkinter - Fatal编程技术网

Python I';我很难找到执行命令的按钮。(特金特)

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

我正在制作一个选择你自己的冒险游戏,我正在尝试创建一个系统,其中有一个全局布尔值,它在真与假之间切换,以指示玩家下一步要去哪里。此外,我将使用条件来指示事件的逻辑和流,为了使逻辑等待GUI,我还添加了一个“count”变量,每次单击按钮时该变量递增1,并使其变为仅当计数大于0时逻辑才会运行。然而,当我创建这两个函数并将它们设置为按钮的命令时,它们在我实际按下按钮之前一直在执行。代码如下:

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,所以堆栈溢出不允许我,非常抱歉:(我不完全理解你的目标是什么,如果这是普遍适用的话,也许可以提出一个新问题。哦,好的,我会这样做,谢谢!