簡體   English   中英

從命令行在 tkinter 畫布上繪圖

[英]Drawing on tkinter canvas from command line

我閱讀了一些關於 tkinter 的教程(基礎),並學習了如何創建一個主循環並向其中添加 gui 元素。 還學習了如何將動作綁定到按鈕小部件。

現在我想這樣做:

  1. 啟動 tkinter 畫布
  2. 能夠從控制台讀取命令並在這些命令之后更新畫布。

示例:我在控制台上編寫帶有參數的命令,並且一些圖形元素被添加到畫布(並且畫布在之后更新)。

有什么可能嗎,也許與線程有關? 你能指出一個你認為最合理的方向嗎?

這是通過標准input功能從控制台獲取用戶輸入的簡單演示。 這種技術有點笨拙,因為我們必須明確告訴 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()

當您單擊"Get input"按鈕時,控制台窗口中將打印“CMD:”提示。 輸入輸入后,字符串將復制到標簽。 如果您在輸入行之前再次單擊該按鈕,將會發生 Bad Things™。 :)

想出了這個:

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 讀取命令然后打開對話框來設置命令參數會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM