【问题标题】:python - Not Equals to Operand not workingpython - 不等于操作数不起作用
【发布时间】:2014-09-09 18:02:56
【问题描述】:

我正在尝试这样当一个值不等于另一个值时,它会绘制一个矩形。这是我的代码。

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(反之亦然),那么它应该是print "test"。但是它没有打印,甚至没有运行绘制矩形代码。

但是,当我在 ifstatement 之前放置另一个虚拟 print 语句时,它会打印出来。

因此我可以判断我的 Not Equals to operand 不起作用,任何人都可以看到我的代码有什么问题吗?

【问题讨论】:

  • 您需要将root.mainloop() 添加到您的a() 方法的末尾,否则它永远不会绘制应用程序。你也忘了.pack()你的画布小部件。
  • “当我在 if 语句之前放置另一个虚拟的 print 语句时,它会打印出来。” 你确定吗?如果我在def b():if c1 != c2: 之间放置一个打印语句,我根本看不到任何输出。程序立即终止。

标签: python python-3.x tkinter python-3.3


【解决方案1】:

您可能不应该将根 Tk 对象放在函数中。我不完全确定tkinter 的结构,但是将root 移到函数之外可能是个好主意——此外,您需要在执行任何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()

【讨论】:

  • 对不起。就像 Chris Johnson 说的,我应该用 B 代替“检查”。
  • 您好。它确实打印了虚拟语句,但是没有绘制矩形?
  • @monkey334 -- 查看我的更新。您从未使小部件可见(使用 tkinter 的几何管理器之一——例如 .grid.pack)。
  • 嗨!这完美无瑕。但是,如果条件不满足,我认为我的后循环似乎不会继续循环。有没有办法让它一直循环直到它满意?例如,一旦用户输入一个数字来更改 c1 和 c2?
【解决方案2】:

删除函数 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,他的root.after(10, b) 呼叫将不再起作用。
【解决方案3】:

您似乎没有执行b 函数。您正在定义它但没有运行它。

向我们展示虚拟打印工作的代码——它在b 定义中吗?我怀疑。

【讨论】:

    【解决方案4】:

    你在函数a()中定义了函数b(),但是你没有调用它,你想看什么?

    编辑:

    是的,我看到了你的编辑和功能,它打印测试。

    【讨论】:

    • 关于 Chris Johnson 的评论,请查看我在代码中的新编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多