Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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-不等于操作数不工作_Python_Python 3.x_Tkinter_Python 3.3 - Fatal编程技术网

python-不等于操作数不工作

python-不等于操作数不工作,python,python-3.x,tkinter,python-3.3,Python,Python 3.x,Tkinter,Python 3.3,我试图使它成为这样,当一个值不等于另一个值时,它将绘制一个矩形。这是我的密码 import tkinter def a(): c1 = 1 c2 = 2 root = tkinter.Tk() canvas = tkinter.Canvas(root, width=800, height=600) def b(): if c1 != c2: print ("test") canvas.cre

我试图使它成为这样,当一个值不等于另一个值时,它将绘制一个矩形。这是我的密码

import tkinter
def a():
    c1 = 1
    c2 = 2
    root = tkinter.Tk()
    canvas = tkinter.Canvas(root, width=800, height=600)

    def b():
        if c1 != c2:
            print ("test")
            canvas.create_rectangle(100, 100, 500, 500, fill='blue')
            root.after(10, b)
    root.after(10, b)
a()
如您所见,在函数
b
中,如果变量
c1
不等于
c2
(反之亦然),则应
打印
“测试”。但是,它没有打印,甚至没有运行“绘制矩形”代码

但是,当我在
if
语句之前放置另一个伪
print
语句时,它将打印该语句


因此,我可以看出我的“不等于”操作数不起作用,有人能看出我的代码有什么问题吗?

您可能不应该将根Tk对象放在函数中。我不完全确定
tkinter
是如何构造的,但是将
移到函数之外可能是一个好主意——此外,在执行
after
调用之前,您需要进入
tkinter
主循环:

import tkinter
root = tkinter.Tk()

def a():
    c1 = 1
    c2 = 2

    canvas = tkinter.Canvas(root, width=800, height=600)
    canvas.pack()

    def b():
        if c1 != c2:
            print ("test")
            canvas.create_rectangle(100, 100, 500, 500, fill='blue')
            root.after(10, b)
    root.after(10, b)
a()
root.mainloop()

您似乎没有执行
b
功能。您正在定义它,但没有运行它

向我们展示伪打印工作的代码——它是否在
b
定义中?我对此表示怀疑。

您在函数a()中定义了函数b(),但您不调用它,您想看到什么

编辑: 是的,我看到您的编辑和功能工作正常,它是打印测试。

删除功能b

import tkinter
def a():
     c1 = 1
     c2 = 2
     root = tkinter.Tk()
     canvas = tkinter.Canvas(root, width=800, height=600)

    if c1 != c2:
        print ("test")
        canvas.create_rectangle(100, 100, 500, 500, fill='blue')
        root.after(10, check)
    root.after(10, check)
a()

很抱歉就像克里斯·约翰逊说的,我应该用B来代替“支票”。你好。它确实打印了伪语句,但是矩形没有绘制?@monkey334——请参阅我的更新。您从未使小部件可见(使用tkinter的几何管理器之一,例如
.grid
.pack
)。您好!这是完美的。但是,如果条件不满足,我认为我的after循环似乎不会继续循环。有没有办法让它一直循环直到满意?例如,一旦用户输入一个数字来更改c1和c2?请查看我在代码中对Chris Johnson评论的新编辑。您需要将
root.mainloop()
添加到
a()
方法的末尾,否则它将永远不会绘制应用程序。您还忘记了
.pack()
您的画布小部件。“当我在
if
语句之前放置另一个虚拟
打印
语句时,它将打印该语句。”您确定吗?如果我在
def b():
If c1!=c2:
,我根本看不到任何输出。程序只是立即终止。但是如果他删除
b
,他的
根目录。after(10,b)
调用将不再有效。