【问题标题】:Python window immediately not responding when testing programs?测试程序时Python窗口立即没有响应?
【发布时间】:2023-03-23 22:20:01
【问题描述】:

我目前正在阅读一本书并使用 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 制作了一个工具包,只是为了方便初学者。

【问题讨论】:

  • 如果您需要帮助,请发布一些代码。
  • 我假设教程是Hands On Python。我在控制台中运行了你的脚本,它对我来说很好。如果您在 PyScripter 中运行它,问题可能在于它,而不是脚本本身。

标签: python user-interface window


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    %gui wx
    

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

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

    【讨论】:

    • 工具包其实是书籍作者整理的一个小工具包。我不得不从他的网站上删除文件。我知道查看文件虽然它来自 tk 如果这有什么不同的话。
    • @user2912641。请参阅我对您的问题的评论。这与事件循环无关 - 您正在使用的 graphics 模块可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多