【问题标题】:Problems with Tkinter CanvasTkinter 画布的问题
【发布时间】:2017-01-10 12:12:49
【问题描述】:

我正在做一些简单的任务来为我将要参加的大学准备 Python,但我遇到了一个问题。 当我第一次运行我的代码时,出现了 tkinter 窗口并绘制了图像,但是当我第二次运行它时,没有出现 tkinter 窗口:( 这是代码:

import math, tkinter

canvas = tkinter.Canvas(width=300, height=300)
canvas.pack()
n = int(input('enter n: '))
x0, y0, r = 150, 150, 100
xx, yy = x0+r, y0
uhol = 360/n
for i in range(n):
    rad = uhol/180*math.pi
    x = x0 + r * math.cos(rad)
    y = y0 + r * math.sin(rad)
    canvas.create_line(x, y, xx, yy)
    xx, yy = x, y
    uhol += 360/n

在那之前的几个小时,我编写了这段代码,并且每次运行它都能正常工作:

import math, tkinter

canvas = tkinter.Canvas(width=300, height=300)
canvas.pack()
x0, y0, r = 150, 150, 100
xx, yy = x0+r, y0
for uhol in range(10, 361, 10):
    rad = uhol/180*math.pi
    x = x0 + r * math.cos(rad)
    y = y0 + r * math.sin(rad)
    canvas.create_line(x, y, xx, yy)
    xx, yy = x, y

我正在使用 Python 3.5.2。

【问题讨论】:

    标签: python canvas tkinter


    【解决方案1】:

    我认为第二个“第一”应该是“第二”。还有两个问题。

    你没有说如何你这两次运行。确切的细节可能很重要。

    您没有创建 tkinter.Tk 实例并将其传递给 Canvas。相反,您依赖于默认的根机制。我认为这是不可靠的,也是一个坏主意。除此之外,您不能在隐藏的根目录上调用方法。

    我将您的代码加载到 IDLE 编辑器中,将第 2 行和第 3 行更改为

    root = tkinter.Tk()
    canvas = tkinter.Canvas(root, width=300, height=300)
    

    按 F5,它就跑了。我再次按F5,它就跑了。一次又一次。

    要从命令行运行或双击文件,您可能需要在末尾添加这一行。

    root.mainloop()
    

    【讨论】:

    • 我每次都在 IDLE 中运行它。我做了你在 IDLE(Python 3.5) 中建议的事情,但是当我在 PyCharm 中运行它时它没有工作,所以谢谢你:)
    • 我刚刚在 Win10 上用 3.5.2 重试,它可以工作,所以你的系统有些不同。
    猜你喜欢
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2021-04-07
    • 2011-05-16
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多