如果在tkinter中单击了statment before按钮,为什么python会执行

如果在tkinter中单击了statment before按钮,为什么python会执行,python,tkinter,Python,Tkinter,当运行时,输出为否,这是为什么?除了创建一个额外的函数,还有什么方法可以绕过它呢。代码是我试图解决的问题的一个例子,而不是实际的代码,因此请尽量不要更改代码,使if语句位于函数Turn()中,因为您做得不对。您正在检查列表框函数的长度,该函数将在程序启动时启动。但要进行检查,您必须将if else置于Turn函数中,当单击按钮时,它将执行Turn命令检查条件是否为true #Mbox from tkinter import * list2= ['charlie','sam','lolo']

当运行时,输出为否,这是为什么?除了创建一个额外的函数,还有什么方法可以绕过它呢。代码是我试图解决的问题的一个例子,而不是实际的代码,因此请尽量不要更改代码,使if语句位于函数Turn()中,因为您做得不对。您正在检查列表框函数的长度,该函数将在程序启动时启动。但要进行检查,您必须将if else置于Turn函数中,当单击按钮时,它将执行Turn命令检查条件是否为true

#Mbox
from tkinter import *

list2= ['charlie','sam','lolo']

def Turn():
   list2=['charlie']     


def Box():
    global list2
    popup = Tk()
    label = Label(popup,text='jack').pack()
    button = Button(popup,text='lew',command=lambda: Turn()).pack()

    if len(list2) == 1:
        print('yes')
    else:
        print('no')

    popup.mainloop()

Box()

您可以在自己的函数中运行if语句,并将其添加到lambda调用中

看看下面的例子,如果你有任何问题,请告诉我

def Turn():
    list2=['charlie']     

    if len(list2) == 1:
       print('yes')
    else:
       print('no')

if
语句位于
框中,该框将在程序执行后立即运行。按下按钮时发生的事情在
Turn
功能中。您的困惑是什么?Box()的执行不会停止等待您单击按钮。我认为你必须重新组织你的代码。这不一定是因为混淆,但我需要找到一种方法,先点击按钮,然后让底部的if语句执行。这不是你想要的方法。稍微想想,如果程序停止等待单击,您根本看不到按钮,因为mainloop()函数永远不会运行。这是一个事件驱动的应用程序,所以你需要在界面上做一些事情来执行if语句并得到你想要的。你真正想要解决的问题是什么。通常,您会尝试使用对象而不是函数来执行类似的操作。想象一个盒子对象,里面有很多按钮。在另一个地方,你可以运行tkinter Main循环。根据OP提供的代码和他们所说的他们正在尝试做的事情,这总是会在lpozo上打印“是”,然后无论你决定如何设置,答案总是“是”。OP很可能只是以
turn
为例,但他们的程序中可能有更复杂的代码。也许turn可以切换某些内容,而不仅仅是将列表的长度更改为1。
from tkinter import *

list2 = ['charlie', 'sam', 'lolo']

def Turn():
    global list2
    list2 = ['charlie']

def run_if_statment():
    global list2
    if len(list2) == 1:
        print('yes')
    else:
        print('no')   

def Box():
    global list2
    popup = Tk()
    Label(popup, text='jack').pack()
    Button(popup, text='lew', command=lambda:(Turn(), run_if_statment())).pack()
    popup.mainloop()

Box()