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