반응형
저는 Arch Linux x86_64에서 Python 3.2.1을 사용하고 있습니다.
이것은 정말 나를 미치게 만듭니다. 그리드를 그리 자마자 ttk.Combobox
에 대해 미리 선택된 기본 값을 갖고 싶습니다. 이것은 내 코드입니다.
from tkinter import Tk, StringVar, ttk
root = Tk()
def combo(parent):
value = StringVar()
box = ttk.Combobox(parent, textvariable=value, state='readonly')
box['values'] = ('A', 'B', 'C')
box.current(0)
box.grid(column=0, row=0)
combo(root)
root.mainloop()
빈 Combobox
를 그립니다. 재미있는 것은 함수를 사용하지 않으면 완벽하게 작동한다는 것입니다.
from tkinter import Tk, StringVar, ttk
root = Tk()
value = StringVar()
box = ttk.Combobox(root, textvariable=value, state='readonly')
box['values'] = ('A', 'B', 'C')
box.current(0)
box.grid(column=0, row=0)
root.mainloop()
물론 실제 프로그램에서는 함수를 사용해야하므로 다른 솔루션이 필요합니다.
해결 방법
문제는 StringVar의 인스턴스가 가비지 수집되고 있다는 것입니다. 코드를 작성한 방식으로 인해 지역 변수이기 때문입니다.
한 가지 해결책은 StringVar가 지속되도록 클래스를 사용하는 것입니다.
from tkinter import Tk, StringVar, ttk
class Application:
def __init__(self, parent):
self.parent = parent
self.combo()
def combo(self):
self.box_value = StringVar()
self.box = ttk.Combobox(self.parent, textvariable=self.box_value,
state='readonly')
self.box['values'] = ('A', 'B', 'C')
self.box.current(0)
self.box.grid(column=0, row=0)
if __name__ == '__main__':
root = Tk()
app = Application(root)
root.mainloop()
참조 페이지 https://stackoverflow.com/questions/6876518
반응형
'파이썬' 카테고리의 다른 글
파이썬에서 정적 클래스 변수가 가능합니까? (0) | 2020.09.28 |
---|---|
파이썬 Python 3 용 tkinter 및 ttk에 대한 새로운 튜토리얼 (0) | 2020.09.28 |
파이썬 Python에서 소켓을 여는 가장 좋은 방법 (0) | 2020.09.28 |
파이썬 Python에서 소켓을 여는 가장 좋은 방법 (0) | 2020.09.28 |
파이썬 Regex to extract URLs from href attribute in HTML with Python (0) | 2020.09.28 |
댓글