2016-08-06 6 views
-1

답변을 찾는 동안 잠시 기다렸습니다. 나는 파이썬을 처음 사용하지만 일반적으로 코딩하지는 않는다. 다양한 버전을 꽤 도전적으로 찾는 것! tkinter 입력 상자에 포커스를 설정하는 방법

어쨌든 나는 지향 매우 구이 해요 그냥 기본으로 연주하고 다음 코드를 가지고 있지만 첫 번째 항목 상자에 포커스를 설정할 수 없습니다

파이썬 3.5.1 작업 Tkinter를 얻을 관리했다. mEntry1.focus() 및 mEntry1.focus_set()을 시도했지만 항상 객체에 속성 오류가 없습니다. 어떤 도움이 필요합니까?

from tkinter import * 

def calc(*args): 
    try: 
     value1 = float(V1.get()) 
     value2 = float(V2.get()) 
     result.set(value1 * value2) 
    except ValueError: 
    pass 
mGui = Tk() 
mGui.geometry('450x450+200+200') 
mGui.title('Test Gui') 
V1 = StringVar() 
V2 = StringVar() 
result = StringVar() 
mEntry1 = Entry(textvariable=V1,width=10).grid(row=0,column=0,sticky=W) 
mEntry2 = Entry(textvariable=V2).grid(row=1,column=0) 
mButton = Button(text='Calculate',command=calc).grid(row=3,column=0) 
mlabel = Label(textvariable=result).grid(row=4,column=2) 
+0

그리고'mEntry'.focus_set()'을 시도하면 어떻게됩니까? 결과는 문제를 알려줍니다. –

+0

파이썬의 강력한 기능 중 하나는 트랙백과 오류 메시지입니다. 그들을 이해하고 사용하는 법을 배우십시오. 나는 당신이 "AttributeError : 'NoneType'객체에 'focus_set'속성이 없다고 가정합니다." 즉, mEntry는 생각이 틀림없는 것처럼 싱글이 아니라 엔트리가 아닙니다. 또한 통화의 기본 반환 값이 없음이라는 것을 알아야합니다. 그래서 .grid에 대한 도움이 "위젯을 배치하십시오 ..."라고 말하면 그것이 반환하는 것을 결코 말하지 않습니다. 순수한 부작용 호출에서는 정상입니다. –

답변

1

모든 Tkinter 위젯에는 focus_set 메소드가 있습니다.

코드에있는 문제는 .grid 메서드가 None을 반환한다는 것입니다. mEntry1None에 따라서

mEntry1 = Entry(textvariable=V1,width=10).grid(row=0,column=0,sticky=W) 

세트 위짓. 당신이 실제로 할 경우 필요에게 위젯 개체에 대한 참조를 다음 하나에 그것을 할 괜찮아요, 물론

mEntry1 = Entry(textvariable=V1,width=10) 
mEntry1.grid(row=0,column=0,sticky=W) 

: 그래서 당신은 위젯을 만들고 두 단계로 그리드에 넣어 필요 단계. 따라서 뭔가가

Entry(textvariable=V1,width=10).grid(row=0,column=0,sticky=W) 

일 것입니다.


BTW, 그것은 from tkinter import *를 사용하는 것이 좋습니다 아니다. 130 개가 넘는 이름을 네임 스페이스로 가져 오므로 자신의 이름과 충돌하거나 다른 모듈의 이름과 충돌 할 수 있습니다. 또한 코드를 읽기가 어렵게 만듭니다. 대신, 예를 들어, tk.Entry 대신 Entry

import tkinter as tk 

을 다음 tk. 접두사를 사용하여 Tkinter의 이름을 참조 할 수 있습니다.

+0

대단히 감사합니다. 지난 3 년 동안 Filemaker를 프로그래밍 해 보았으며 비교할 때 약간의 오르막길을 찾았습니다! –

+0

@AndyEvans 내 대답이 마음에 들면 다행이라고 생각합니다. [수락] (http://meta.stackexchange.com/a/5235) 그것을 고려해보십시오. :) 저는 Filemaker에 익숙하지 않지만 Tkinter는 익숙한 것보다 낮은 수준에서 작동합니다. 그리고 [이벤트 주도 프로그래밍] (https://en.wikipedia.org/wiki/Event-driven_programming) 패러다임은 Filemaker에서하는 것과는 다른 작업 방식입니다. –

+0

(계속) 처음에는 머리를 감싸는 것이 약간 어려울 수 있습니다.하지만 자신의 작은 테스트 프로그램을 계속 사용하고 있고 여기 (그리고 다른 곳에서는 온라인으로) 수많은 좋은 예를 수정하면 점차 그 점심에 점차 익숙해 질 거라 확신 해요. –

관련 문제