2016-09-25 4 views
-1

tkinter에 대한 자습서 (기본)를 읽었으며 mainloop을 만들고 gui 요소를 추가하는 방법을 배웠습니다. 단추 위젯에 작업을 바인딩하는 방법도 배웠습니다.명령 줄에서 tkinter 캔버스에 그리기

지금은이 일을하고 싶습니다 :

  1. 시작합니다 Tkinter를 캔버스
  2. 그 명령 후 캔버스를 콘솔에서 명령을 읽고 업데이트 할 수 있습니다.

예 :콘솔에 인수와 함께 명령을 쓰고 일부 그래픽 요소가 캔버스에 추가되고 캔버스가 업데이트됩니다.

뭔가 관련이있을 수 있습니까? 나를 따르는 것이 가장 합리적이라고 생각하는 한 방향으로 나를 가리킬 수 있습니까?

+0

SO는 무료 코드 서비스가 아닙니다. 문제를 직접 해결하기 위해 지금까지해온 것을 보여 주시고 [MCVE] (http://stackoverflow.com/help/mcve)를 보내주십시오. –

+0

그래, 알아. 사실 나는 코드를 다시 원하지 않는다. 콘솔에서 입력을 받아들이는 것이 가능한지 (이벤트를 읽는 것이 아닌지) 알고 나중에 tkinter 창이 업데이트되도록하고 싶습니다. 문제는 입력 인터페이스로 사용되는 tkinter를 사용하는 예제가 많다는 것입니다. 콘솔을 운영 인터페이스로 사용하고 tkinter 창을 상호 작용없이 결과 만 표시하고 싶습니다. 스레딩과 관련이 있다면 더 자세히 살펴 보 겠지만 시작할 장소가 필요합니다. – Marco

+0

_can_이 작업을 수행하면 스레딩이 필요하지 않지만 스레딩이 없으면 다소 복잡해 보입니다. 곧 간단한 데모를 게시하겠습니다. OTOH, Tkinter GUI와 콘솔 창을 번갈아 가면서 사용자에게 큰 경험이 아닙니다. GUI를 항상 콘솔 창 위에 두도록 강요하면 나쁘지 않다고 생각합니다. –

답변

0

표준 input 기능을 통해 콘솔에서 사용자 입력을 가져 오는 간단한 데모가 있습니다. 이 테크닉은 Tkinter가 Button (또는 다른 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 lines ™은 입력 라인이 입력되기 전에 버튼을 다시 클릭하면 발생합니다. :)

0

이 함께했다 :

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에서 명령을 직접 읽은 다음 명령 매개 변수를 설정하기위한 대화 상자를 열면 더 좋을 것입니다.

+0

예, 입력 위젯에서 명령을받는 것이 사용자와 프로그래머 모두에게 더 간단합니다.OTOH, 콘솔 창은 멋진 기능을 가지고 있습니다 :'import readline'을 사용하면 명령 행 편집 및 히스토리 (플랫폼이 readline을 지원할 경우)를 얻을 수 있습니다. –

+0

키 이벤트를 읽은 후 콘솔 창에 포커스를 되돌릴 수있는 명령이 있습니까? – Marco