{"id":26833395,"url":"https://github.com/mr-won/tk_option","last_synced_at":"2025-03-30T15:28:53.186Z","repository":{"id":138423034,"uuid":"455437655","full_name":"mr-won/Tk_Option","owner":"mr-won","description":"tkinter와 Python으로 옵션 선택하는 위젯 다루기","archived":false,"fork":false,"pushed_at":"2025-03-08T00:56:24.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-18T02:27:15.420Z","etag":null,"topics":["python","python-tkinter"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mr-won.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-04T05:53:30.000Z","updated_at":"2025-03-08T00:56:29.000Z","dependencies_parsed_at":"2025-03-18T02:27:18.884Z","dependency_job_id":"aaffa336-a704-4c0a-84db-dd39ce5dad43","html_url":"https://github.com/mr-won/Tk_Option","commit_stats":null,"previous_names":["wonttan/tk_option","wonchihyeon/tk_option","chihyunwon/tk_option","mr-won/tk_option","chihyeonwon/tk_option"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2FTk_Option","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2FTk_Option/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2FTk_Option/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-won%2FTk_Option/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mr-won","download_url":"https://codeload.github.com/mr-won/Tk_Option/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246337861,"owners_count":20761282,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["python","python-tkinter"],"created_at":"2025-03-30T15:28:52.695Z","updated_at":"2025-03-30T15:28:53.168Z","avatar_url":"https://github.com/mr-won.png","language":"Python","readme":"# Tk_Option\ntkinter와 Python으로 옵션 선택하는 위젯 다루기   \n   \n구체적으로는 Listbox, Checkbutton, Radiobutton, Combobox, Spinbox, Scale 6개를 다뤄보도록 하겠습니다..\n\n## Listbox\n\n### 리스트박스는 Listbox()함수를 이용해서 만들 수 있습니다.   \n   \n마찬가지로 pack()함수로 배치를 해줍니다.\n\nListbox.py\n```python\nlb = Listbox(win)\nlb.pack()\n```   \n   \n### 리스트박스 안에 컨텐츠를 넣을 때는 insert(위치, \"내용\") 함수를 사용합니다.   \n   \n위치는 위에서부터 0,1,2,3 순으로 오름차순으로 들어가게됩니다.\n```python\nlb = Listbox(win)\nlb.insert(0, \"1번\")\nlb.insert(1, \"2번\")\nlb.insert(2, \"3번\")\nlb.insert(3, \"4번\")\nlb.insert(4, \"5번\")\nlb.pack()\n```\n\n### 리스트 박스의 컨텐츠를 다중 선택을 하고 싶을 때는 config의 옵션으로 selectmode의 값을 multiple을 주면 됩니다.\n```python\nlb = Listbox(win)\nlb.config(selectmode=\"multiple\")\nlb.insert(0, \"1번\")\nlb.insert(1, \"2번\")\nlb.insert(2, \"3번\")\nlb.insert(3, \"4번\")\nlb.insert(4, \"5번\")\nlb.pack()\n```   \n\n다음으로 버튼과 라벨을 만들어서 옵션을 선택하고 버튼을 누르면 라벨에 몇번째 옵션인지 표시되도록 해 보겠습니다.   \n   \n버튼과 라벨을 하나씩 만들어줍니다.\n```python\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\nbtn.pack()\n\n# Label\nlab = Label(win)\nlab.pack()\n```   \n\n버튼을 클릭하면 click 함수가 실행되도록 하고 현재 선택되있는 옵션의 인덱스를 추출하는 함수를 사용해서 몇 번째 옵션인지 출력하도록 해 보겠습니다.\n```python\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    text = lb.curselection()[0]\n    lab.config(text=\"{}번 째를 선택하셨습니다.\".format(int(text)+1))\n\n\nbtn.config(command=click)\nbtn.pack()\n```\n\n### 최종 코드와 프로그램 실행 화면   \n   \n최종 코드는 다음과 같습니다.\n\nListbox.py\n```pytohn\nfrom tkinter import *\nwin = Tk()\nwin.geometry(\"500x500\")\nwin.option_add(\"*Font\", \"Arial, 20\")\n# Listbox\nlb = Listbox(win)\n# lb.config(selectmode=\"multiple\")\nlb.insert(0, \"1번\")\nlb.insert(1, \"2번\")\nlb.insert(2, \"3번\")\nlb.insert(3, \"4번\")\nlb.insert(4, \"5번\")\nlb.pack()\n\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    text = lb.curselection()[0]\n    lab.config(text=\"{}번 째를 선택하셨습니다.\".format(int(text)+1))\n\n\nbtn.config(command=click)\nbtn.pack()\n\n# Label\nlab = Label(win)\nlab.pack()\nwin.mainloop()\n```\n프로그램의 초기화면입니다.\n   \n\n![Listbox_init](https://user-images.githubusercontent.com/58906858/152482708-da76f81a-9d17-4c2e-9516-7083325db36d.png)   \n   \n2번째 옵션을 선택하고 옵션선택 버튼을 누르면 다음과 같이 몇번 째를 선택했는지 출력해줍니다.\n![Listbox_use](https://user-images.githubusercontent.com/58906858/152482832-cc1e026d-51a0-4efe-b856-9fab29358fda.png)\n\n## Checkbutton\n\n### CheckButton는 CheckButton 함수를 이용해서 만들 수 있습니다.\n```python\ncb = CheckBox(win)\ncb.config(text=\"1번\")\ncb.pack()\n```   \n### CheckButton은 Listbox와는 다르게 변수하나에 하나의 위젯(옵션)을 저장할 수 있습니다.\n체크버튼을 3개를 만들려면 변수 3개를 선언해서 각각 체크버튼을 생성해줘야합니다.\n```python\ncb1 = CheckBox(win, text=\"1번\")\ncb2 = CheckBox(win, text=\"1번\")\ncb3 = CheckBox(win, text=\"1번\")\ncb1.pack()\ncb2.pack()\ncb3.pack()\n```  \n\n### CheckButton의 체크유무를 구분해주는 함수 IntVar()를 사용합니다.\n\ncv 변수에 IntVar() 함수를 저장하고 get 함수로 cv 클래스 안의 값을 꺼내오기 위해 get 함수로 출력을 해봅니다.\n```python\n# Checkbutton\ncv = IntVar() # 클릭한상태를 정수의 형태로 저장합니다.\ncb = Checkbutton(win, text=\"1번\", variable=cv)\ncb.pack()\n\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    text = cv.get() # cv 클래스 안의 값을 꺼내오기위해 get 함수를 사용\n    print(text) # 꺼내온 값을 출력\n\n\nbtn.config(command=click)\nbtn.pack()\n```\n옵션을 클릭하지 않았을 때 0을 옵션을 클릭했을 때 1을 출력하는 것을 알 수 있습니다.\n\n### 최종코드와 프로그램 실행화면\n\n최종코드는 다음과 같습니다.\n\ntk_Checkbutton.py\n```python\nfrom tkinter import *\nwin = Tk()\nwin.geometry(\"500x500\")\nwin.option_add(\"*Font\", \"Arial, 20\")\n# Checkbutton\ncv = IntVar()\ncb = Checkbutton(win, text=\"1번\", variable=cv)\ncb.pack()\n\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    text = cv.get()\n    print(text)\n\n\nbtn.config(command=click)\nbtn.pack()\n\n# Label\nlab = Label(win)\nlab.pack()\nwin.mainloop()\n```\n\n프로그램 실행화면은 다음과 같습니다.\n\n![Checkbutton](https://user-images.githubusercontent.com/58906858/152485445-8dfcb0a8-2459-47db-aba8-6ead4c57bae4.png)   \n반환되는 값 0과 1을 사용해서 다양한 응용이 가능합니다.   \n\n## Radiobutton\n\n### 라디오버튼은 체크버튼과 만드는 방법은 유사하나 여러가지 옵션이 있을 때 그 중 하나를 선택한다는 차이가 있습니다.   \n\nRadiobutton을 생성하고 Checkbutton과 마찬가지로 IntVar()함수를 사용해서 cv에 저장한후 variable옵션으로 줍니다.\n```python\n# Radiobutton\nrv = IntVar()\nrb = Radiobutton(win, text=\"1번\", variable=rv)\nrb.pack()\n```   \n   \n변수 3개에 각각 다른 라디오버튼을 생성해줍니다.\n```python\n# Radiobutton\nrv = IntVar()\nrb1 = Radiobutton(win, text=\"1번\", variable=rv)\nrb2 = Radiobutton(win, text=\"2번\", variable=rv)\nrb3 = Radiobutton(win, text=\"3번\", variable=rv)\nrb1.pack()\nrb2.pack()\nrb3.pack()\n```\n\n하지만 이렇게 구성하면 겉보기로는 구분이 되어있지만 내부적으로는 구분이 되어있지않아 옵션하나를 선택하면 모두 선택이 됩니다.   \n   \n변수는 rv 하나만 사용해서 같은 항목으로 묶고 각각의 옵션을 구분하기 위해서 value옵션의 값을 다르게 줍니다.\n```python\n# Radiobutton\nrv = IntVar()\nrb1 = Radiobutton(win, text=\"1번\", value=0, variable=rv)\nrb2 = Radiobutton(win, text=\"2번\", value=1, variable=rv)\nrb3 = Radiobutton(win, text=\"3번\", value=2, variable=rv)\nrb1.pack()\nrb2.pack()\nrb3.pack()\n```\n\n버튼을 눌렀을 때 라벨에 반환값을 출력하도록 해보면\n```python\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    lab_text = rv.get()\n    lab.config(text=lab_text)\n\n\nbtn.config(command=click)\nbtn.pack()\n```\nRadioButton함수의 value옵션 값으로 지정한 값이 출력되는 것을 알 수 있습니다.\n\n### 최종코드와 프로그램 실행\n\n최종코드는 다음과 같습니다.\n```python\nfrom tkinter import *\nwin = Tk()\nwin.geometry(\"500x500\")\nwin.option_add(\"*Font\", \"Arial, 20\")\n# Radiobutton\nrv = IntVar()\nrb1 = Radiobutton(win, text=\"1번\", value=0, variable=rv)\nrb2 = Radiobutton(win, text=\"2번\", value=1, variable=rv)\nrb3 = Radiobutton(win, text=\"3번\", value=2, variable=rv)\nrb1.pack()\nrb2.pack()\nrb3.pack()\n\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    lab_text = rv.get()\n    lab.config(text=lab_text)\n\n\nbtn.config(command=click)\nbtn.pack()\n\n# Label\nlab = Label(win)\nlab.pack()\nwin.mainloop()\n```\n   \n프로그램 실행 초기화면은 다음과 같습니다.   \n![Radiobutton_init](https://user-images.githubusercontent.com/58906858/152487429-bdd77fff-3da1-47b4-9bef-1347cb8f581d.png)\n\n옵션을 선택하고 옵션선택을 누르면 다음과 같이 value옵션에 저장한 값이 출력되는 것을 알 수 있습니다.\n![Radiobutton_value](https://user-images.githubusercontent.com/58906858/152487573-c5229c2e-28ab-4f3d-ae81-cd882b8ca4bf.png)\n\n## Combobox\n   \n### 콤보박스는 tkinter의 세부적인 .ttk 안에 있으므로 이를 import를 해줍니다.\n```python\nfrom tkinter .ttk import *\n```\n   \n콤보박스를 생성하기 위해 Combobox 함수를 이용하고 배치해줍니다.\n```python\ncb = Combobox(win)\ncb.pack()\n```\n\n### 콤보 박스에 내용을 넣을 때는 리스트를 사용합니다.\n  \n리스트를 만들고 config의 values 옵션으로 만든 리스트를 넣어줍니다.\n```python\ncb_list = [\"1\", \"2\", \"3\"]\ncb = Combobox(win)\ncb.config(values=cb_list)\ncb.pack()\n```\n### 콤보 박스의 어떤 내용이 클릭됬는 지 알아보기 위해서는 get 함수를 사용합니다.\n   \n옵션 선택 버튼의 함수안에 위젯(cb)에 get 함수를 사용해서 리스트에 넣은 내용을 출력할 수 있습니다.\n```python\ndef click():\n    lab_text = cb.get()\n    lab.config(text=lab_text)\n```\n\n### 최종 코드와 프로그램 실행 화면\n\n최종 코드는 다음과 같습니다.\n```python\nfrom tkinter import *\nfrom tkinter .ttk import *\nwin = Tk()\nwin.geometry(\"500x500\")\nwin.option_add(\"*Font\", \"Arial, 20\")\n# Combobox\ncb_list = [\"1\", \"2\", \"3\"]\ncb = Combobox(win)\ncb.config(values=cb_list)\ncb.pack()\n\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    lab_text = cb.get()\n    lab.config(text=lab_text)\n\n\nbtn.config(command=click)\nbtn.pack()\n\n# Label\nlab = Label(win)\nlab.pack()\nwin.mainloop()\n```\n프로그램 실행 초기화면은 다음과 같습니다.   \n   \n![Combobox_init](https://user-images.githubusercontent.com/58906858/152632475-e4f22993-8c5e-49a4-a723-e36cfee12b34.png)   \n   \n클릭하여 옵션 1을 선택하고 옵션선택 버튼을 누르면 버튼 밑에 1이 정상적으로 출력되는 것을 알 수 있습니다.\n![Combobox_use](https://user-images.githubusercontent.com/58906858/152632478-17ab3f18-45e4-4cdf-93f4-48f97432ae6e.png)\n\n## Spinbox\n\n### Spinbox 함수를 사용해서 위젯을 만들고 배치합니다.\n```python\nsb = Spinbox(win)\nsb.pack()\n```\n\n### 만들기만 하면 아무내용이 없으므로 최대치와 최소치를 config의 from_, to 옵션으로 설정합니다.\n```python\nsb = Spinbox(win)\nsb.config(from_=-1, to=1)\nsb.pack()\n```\n\n### 선택한 수치를 출력하는 것은 get함수를 사용합니다.\n   \nget 함수를 사용해서 선택한 수치를 라벨에 출력합니다.\n```python\ndef click():\n    lab_text = sb.get()\n    lab.config(text=lab_text)\n```\n\n### 최종코드와 프로그램 실행 화면\n\n최종코드는 다음과 같습니다.\n```python\nfrom tkinter import *\nfrom tkinter .ttk import *\nwin = Tk()\nwin.geometry(\"500x500\")\nwin.option_add(\"*Font\", \"Arial, 20\")\n# Spinbox\nsb = Spinbox(win)\nsb.config(from_=-1, to=1)\nsb.pack()\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    lab_text = sb.get()\n    lab.config(text=lab_text)\n\n\nbtn.config(command=click)\nbtn.pack()\n\n# Label\nlab = Label(win)\nlab.pack()\nwin.mainloop()\n```\n\n프로그램 초기 실행 화면은 다음과 같습니다.   \n   \n![Spinbox_init](https://user-images.githubusercontent.com/58906858/152632760-415fb41f-221a-4ee9-b789-95310a56a798.png)\n   \n옵션을 -1로 선택하고 옵션선택 버튼을 클릭하면 밑에 위치한 라벨에 정상적으로 출력되는 것을 알 수 있습니다.\n![Spinbox_use](https://user-images.githubusercontent.com/58906858/152632779-92af64f3-c9d5-4223-8293-a59d0595de77.png)\n\n## Scale\n   \n### Scale 함수를 사용해서 생성하고 배치합니다.\n```python\nscale=Scale(win)\nscale.pack()\n```\n\n### Scale안의 수치의 범위는 from_, to 를 사용해서 바꿀 수 있습니다.\n```python\n# Scale\nscale = Scale(win)\nscale.config(from_=50, to=0)\nscale.pack()\n```\n### Scale의 방향을 수평으로 바꾸려면 orient옵션을 \"horizontal\"로 설정합니다.\n\nScale은 기본적으로는 수직으로 배치되어있습니다.   \n   \n수평으로 바꾸려면 config 옵션의 orient 값을 \"horizontal\"로 설정하면 됩니다.\n```python\n# Scale\nscale = Scale(win)\nscale.config(from_=0, to=50, orient=\"horizontal\")\nscale.pack()\n```\n### 특정 수치를 표시할 때는 tickinterval 옵션을 설정합니다.\n\n0부터 100까지 10 간격으로 수치를 표시하려면 다음과 같습니다.\n```python\nscale.config(length=1000, tickinterval=10, from_=0, to=50, orient=\"horizontal\")\n```\n실행화면은 다음과 같습니다.\n![Scale_tickinterval](https://user-images.githubusercontent.com/58906858/152633130-eb52d57e-89ab-48f2-bc27-d3bde3108d08.png)   \n   \n### 선택한 수치를 출력하기 위해서 get 함수를 사용합니다.\n\n옵션 버튼을 클릭했을 때 선택한 수치를 클릭하기 위해서 get함수를 사용합니다.\n```python\ndef click():\n    lab_text = scale.get()\n    lab.config(text=lab_text)\n```\n\n### 최종코드와 프로그램 실행 화면\n  \n최종코드는 다음과 같습니다.\n```python\nfrom tkinter import *\nwin = Tk()\nwin.geometry(\"500x500\")\nwin.option_add(\"*Font\", \"Arial, 20\")\n# Scale\nscale = Scale(win)\nscale.config(length=1000, tickinterval=10, from_=0, to=50, orient=\"horizontal\")\nscale.pack()\n\n# Button\nbtn = Button(win)\nbtn.config(text=\"옵션 선택\")\n\n\ndef click():\n    lab_text = scale.get()\n    lab.config(text=lab_text)\n\n\nbtn.config(command=click)\nbtn.pack()\n\n# Label\nlab = Label(win)\nlab.pack()\nwin.mainloop()\n```\n   \n프로그램 실행 화면은 다음과 같습니다.   \n   \n   \n![Scale_init](https://user-images.githubusercontent.com/58906858/152633220-3590b87d-b744-4b54-b309-e7f67d0017e9.png)   \n   \n수치를 지정하고 옵션버튼을 누르면 라벨에 지정한 수치가 정상적으로 출력됩니다.\n![Scale_use](https://user-images.githubusercontent.com/58906858/152633227-43448c1f-149f-474d-979d-9f4d78c6bc90.png)\n\n\n#### 이렇게 6개의 옵션을 지정하는 위젯들에 대해서 정리해보았습니다. 최종 수정 2022-02-05\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmr-won%2Ftk_option","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmr-won%2Ftk_option","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmr-won%2Ftk_option/lists"}