2

我目前正在阅读一本书并使用 PyScripter。一切都很好,直到我开始处理 GUI 的部分。

基本上,当我启动一个程序时,它立即没有响应。一部分是制作一个程序,用户在窗口中单击 3 个点,然后通过连接这些点制作一个三角形。一旦形成三角形,它就会停止响应。因此,它等待程序要完成的任何事情,然后就搞砸了。

任何帮助将不胜感激,谢谢。

from graphics import *


def main():
    win = GraphWin("Draw a Triangle")
    win.setCoords(0.0, 0.0, 10.0, 10.0)
    message = Text(Point(5, 0.5), "Click on three points")
    message.draw(win)

    p1 = win.getMouse()
    p1.draw(win)
    p2 = win.getMouse()
    p2.draw(win)
    p3 = win.getMouse()
    p3.draw(win)

    triangle = Polygon(p1,p2,p3)
    triangle.setFill("peachpuff")
    triangle.setOutline("cyan")
    triangle.draw(win)

    message.setText("click anywhere to quit")
    win.getMouse()

main()

编辑:用代码更新。就像我在我正在阅读的这本书的作者之前所说的那样,我从 tk 制作了一个工具包,只是为了让初学者更容易。

4

2 回答 2

1

实际上,它并没有“搞砸”。你只是忘了把 win.close() 放在 win.getMouse() 之后。

于 2015-02-04T21:14:47.573 回答
0

几乎可以保证,主事件循环没有运行。如何执行此操作取决于您使用的 GUI 工具包,但这样做是有问题的,因为一旦您启动事件循环,它将接管您的控制台,直到它退出。

处理这个问题的最简单方法可能是切换到 IPython(http://ipython.org);一旦你启动控制台,你就可以做

%gui wx

(或 qt,或 tk,或您正在使用的任何 gui 工具包),它将在后台启动应用程序循环,允许您进行实验。

这使用了一个 python inputhook,如果你愿意,完全可以从 IPython 中窃取该代码并在 pyscripter 中使用它。可能有一种方法可以让它们一起工作,不确定。

于 2013-10-24T20:18:16.677 回答