예를 들어 항목에서 값을 얻으려면 작동하는 범용 함수를 만들 수 있습니까? 이 같은엔트리, 콤보 박스, 텍스트에서 값을 가져 오는 범용 함수
뭔가 대부분의 Tkinter의 텍스트 기능에 대한 도움말
예를 들어 항목에서 값을 얻으려면 작동하는 범용 함수를 만들 수 있습니까? 이 같은엔트리, 콤보 박스, 텍스트에서 값을 가져 오는 범용 함수
뭔가 대부분의 Tkinter의 텍스트 기능에 대한 도움말
아니요, 그렇지 않습니다. 당신은 그러나 다음과 같이 함수를 정의 할 수 있습니다 :
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()
이 오류가 발생했습니다 :'예외 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'이 (가) 참조 됨 ' –
함수를 수정할 때 반드시 실수를해야합니다. 함수에'global disp_str'를 첫 줄로 추가하십시오. – Nae
오류를 발견했습니다. 다른 기능에있었습니다. 이제는 정말 고마워요! –
, VAR에 대한
def returnInput(obj):
_x = StringVar()
obj.configure(textvariable=_x)
return str(_x.get())
감사합니다 = obj.get() 몇 가지 예외를 제외하고는 대부분 작동합니다. 예를 들어
:
entry.get()
listbox.get(listbox.curselection())
또는 콤보 용 exportselection.
함수를 만드는 것보다 이러한 메서드를 사용하는 것이 훨씬 쉽습니다.
첫 번째 진술은 거짓입니다. 'obj.get()'은 Entry 위젯 (및'* Var' 클래스)에서만 작동합니다. 'get()'을 사용하는 다른 위젯들은 하나 이상의 인수를 필요로합니다. –
변수 할당을 사용할 때 함수를 사용하는 것이 쉽지 않을 수도 있다는 것을 증명합니다. –
당신이 코드는 아무 의미도하지 않습니다 - 그것은 개체에 아무것도 넣어 사람이 전에 StringVar''에서 데이터를 가져옵니다. 시작할 때'StringVar'를'Entry'에 할당해야하지만, 다른 순간에'StringVar'에서 값을 얻습니다. – furas