2017-12-25 1 views
0

예를 들어 항목에서 값을 얻으려면 작동하는 범용 함수를 만들 수 있습니까? 이 같은엔트리, 콤보 박스, 텍스트에서 값을 가져 오는 범용 함수

뭔가 대부분의 Tkinter의 텍스트 기능에 대한 도움말

+0

당신이 코드는 아무 의미도하지 않습니다 - 그것은 개체에 아무것도 넣어 사람이 전에 StringVar''에서 데이터를 가져옵니다. 시작할 때'StringVar'를'Entry'에 할당해야하지만, 다른 순간에'StringVar'에서 값을 얻습니다. – furas

답변

0

아니요, 그렇지 않습니다. 당신은 그러나 다음과 같이 함수를 정의 할 수 있습니다 :

def uni_get(widget): 

    wgt_typ = type(widget).__name__ 
    if wgt_typ == 'Label' or wgt_typ == 'Button': 
     disp_str = widget['text'] 

    elif wgt_typ == 'Text': 
     disp_str = widget.get('1.0', 'end-1c') 

    elif wgt_typ == 'Combobox' or wgt_typ == 'Entry': 
     disp_str = widget.get() 

    return disp_str 

데모 예 :

import tkinter as tk 
from tkinter import ttk 

def uni_get(): 
    #to dynamically update the selected widget passed to uni_get 
    global cbb 
    widget = root.winfo_children()[cbb.current()] 

    wgt_typ = type(widget).__name__ 
    if wgt_typ == 'Label' or wgt_typ == 'Button': 
     disp_str = widget['text'] 

    elif wgt_typ == 'Text': 
     disp_str = widget.get('1.0', 'end-1c') 

    elif wgt_typ == 'Combobox' or wgt_typ == 'Entry': 
     disp_str = widget.get() 

    print(disp_str) 

root = tk.Tk() 

cbb = ttk.Combobox(root) 
ent = tk.Entry(root) 
txt = tk.Text(root) 
lbl = tk.Label(root) 
btn = tk.Button(root, command=uni_get) 

###  default widget configs  ### 
cbb['values'] = ["Combobox", "Entry", "Text", "Label", "Button"] 
cbb.current(0) 
ent.insert('0', "Entry") 
txt.insert('1.0', "Text") 
lbl['text'] = "Label" 
btn['text'] = "Button" 

###  layout  ### 
cbb.pack() 
ent.pack() 
txt.pack() 
lbl.pack() 
btn.pack() 

root.mainloop() 
+0

이 오류가 발생했습니다 :'예외 Tkinter 콜백에서 추적 (최근 호출 마지막) : 파일 "C : \ Users \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ tkinter \ __ init__.py" , 줄 1699, __call__ return self.func (* args) 파일 "C : \ Users \ Desktop \ PyEngine \ gui.py"줄 75, 저장 x1 = uni_get (X) 파일 "C : \ Users \ User \ Desktop \ PyEngine \ gui.py ", 줄 70, uni_get print (disp_str) UnboundLocalError : 할당 전에 로컬 변수 'disp_str'이 (가) 참조 됨 ' –

+0

함수를 수정할 때 반드시 실수를해야합니다. 함수에'global disp_str'를 첫 줄로 추가하십시오. – Nae

+0

오류를 발견했습니다. 다른 기능에있었습니다. 이제는 정말 고마워요! –

1

, VAR에 대한

def returnInput(obj): 
    _x = StringVar() 
    obj.configure(textvariable=_x) 
    return str(_x.get()) 

감사합니다 = obj.get() 몇 가지 예외를 제외하고는 대부분 작동합니다. 예를 들어

:

entry.get() 
listbox.get(listbox.curselection()) 

또는 콤보 용 exportselection.

함수를 만드는 것보다 이러한 메서드를 사용하는 것이 훨씬 쉽습니다.

+1

첫 번째 진술은 거짓입니다. 'obj.get()'은 Entry 위젯 (및'* Var' 클래스)에서만 작동합니다. 'get()'을 사용하는 다른 위젯들은 하나 이상의 인수를 필요로합니다. –

+0

변수 할당을 사용할 때 함수를 사용하는 것이 쉽지 않을 수도 있다는 것을 증명합니다. –

관련 문제