Python 从命令行在tkinter画布上绘制

Python 从命令行在tkinter画布上绘制,python,canvas,tkinter,Python,Canvas,Tkinter,我读了一些关于tkinter的教程(基础),学习了如何创建一个主循环并向其中添加gui元素。还学习了如何将操作绑定到按钮小部件 现在我想这样做: 启动tkinter画布 能够从控制台读取命令并在这些命令之后更新画布 例如: 我在控制台上编写带有参数的命令,一些图形元素被添加到画布中(画布随后更新) 有什么可能的事吗,也许是和辐射有关的? 你能告诉我一个你认为最合理的方向吗?下面是一个通过标准输入功能从控制台获取用户输入的简单演示。这种技术有点笨拙,因为我们必须明确地告诉Tkinter通过单击按钮

我读了一些关于tkinter的教程(基础),学习了如何创建一个主循环并向其中添加gui元素。还学习了如何将操作绑定到按钮小部件

现在我想这样做:

  • 启动tkinter画布
  • 能够从控制台读取命令并在这些命令之后更新画布
  • 例如: 我在控制台上编写带有参数的命令,一些图形元素被添加到画布中(画布随后更新)

    有什么可能的事吗,也许是和辐射有关的?
    你能告诉我一个你认为最合理的方向吗?

    下面是一个通过标准
    输入功能从控制台获取用户输入的简单演示。这种技术有点笨拙,因为我们必须明确地告诉Tkinter通过单击按钮(或其他GUI事件)来获取输入字符串,但这对您的应用程序来说可能不是什么大问题

    import tkinter as tk
    
    root = tk.Tk()
    stuff = tk.StringVar()
    display = tk.Label(root, textvariable=stuff)
    display.pack()
    
    def get_input():
        s = input("CMD: ")
        stuff.set(s)
    
    tk.Button(root, text="Get input", command=get_input).pack()
    root.mainloop()
    
    当您单击
    “获取输入”
    按钮时,控制台窗口中将打印“CMD:”提示。输入输入后,字符串将复制到标签。坏事™ 如果在输入行之前再次单击按钮,则会发生此情况。:)

    想到了这个:

    from Tkinter import *
    import random
    
    root = Tk()
    width = 800
    height = 600
    
    def key(event):
        s = raw_input("CMD: ")
    
        if s == 'quit':
            root.destroy()
    
        if s == 'l':
            x1 = random.randint(0,width)
            x2 = random.randint(0,width)
            y1 = random.randint(0,height)
            y2 = random.randint(0,height)
            frame.create_line(x1,y1,x2,y2)
            frame.focus_force()
    
    
    
    frame = Canvas(root, width=width, height=height)
    frame.bind("<Key>", key)
    frame.pack()
    frame.focus_set()
    
    root.mainloop()
    
    从Tkinter导入*
    随机输入
    root=Tk()
    宽度=800
    高度=600
    def键(事件):
    s=原始输入(“CMD:”)
    如果s==‘退出’:
    root.destroy()
    如果s=='l':
    x1=random.randint(0,宽度)
    x2=随机的.randint(0,宽度)
    y1=random.randint(0,高度)
    y2=随机的.randint(0,高度)
    帧。创建_线(x1,y1,x2,y2)
    帧。聚焦力()
    框架=画布(根,宽度=宽度,高度=高度)
    frame.bind(“,键)
    frame.pack()
    frame.focus_set()
    root.mainloop()
    

    这样做有点复杂,因为在控制台上输入某些内容之前,我必须通过单击其窗口使焦点返回。也许直接从Tkinter读取命令,然后打开对话框设置命令参数会更好。

    所以这不是免费的代码服务。请向我们展示您迄今为止为解决问题所做的工作,并为我们提供一个解决方案。是的,我知道。事实上,我不想要回代码。我只是想知道是否可以接受控制台的输入(而不是读取事件),并在之后更新tkinter窗口。问题是,我看到很多tkinter用作输入接口的示例,而我希望控制台作为接口运行,tkinter窗口只显示结果而不显示交互。如果它与线程相关,我会更深入地研究它,但我需要一个开始的地方。你可以这样做,它甚至不需要线程,但我想没有线程它有点笨重。我很快会发布一个简短的演示。OTOH,这对用户来说不是一个很好的体验,必须在Tkinter GUI和控制台窗口之间切换。我想如果您强制GUI始终位于控制台窗口上方,这也不算太糟糕。我已经添加了您的示例,并在下面进行了修改,谢谢!输入必须来自控制台吗?为什么不提供一个GUI窗口呢?是的,从入口小部件获取命令对于用户和程序员来说都比较简单。OTOH,控制台窗口有一些很好的功能:如果你
    导入readline
    ,你会得到命令行编辑和历史记录(如果你的平台支持readline)。也许有什么命令可以在读取关键事件后将焦点放回控制台窗口?