2012-12-12 8 views
9

나는 이것을 과장 생각할 것이지만, 어떤 이유로이 사실을 알 수없는 것 같습니다. 내 텍스트 필드에 스크롤 막대를 첨부하려고하는데 그렇게 할 수 없었습니다. 이 코드는 바로 옆에 내 텍스트 필드에 아주 작은 스크롤 막대를 배치합니다스크롤바를 텍스트 위젯에 연결하는 방법은 무엇입니까?

self.scroller = Scrollbar(self.root) 
self.scroller.place(x=706, y=121) 
self.outputArea = Text(self.root, height=26, width=100) 
self.outputArea.place(x=0, y=120) 
self.scroller.config(command=self.outputArea.yview) 
self.outputArea.config(state=DISABLED, yscrollcommand = self.scroller.set) 

(아주 작은, 나는 당신이 사이에서 위쪽 및 아래쪽 화살표를하지만, 아무것도 볼 수 있다는 것을 의미) : 다음 코드 세그먼트는 . 내 텍스트 필드가 가득 찼을 때 스크롤 할 수 있지만 텍스트 필드와 동일한 높이가되도록 스크롤 막대의 높이를 설정하는 방법이 있습니까? pack, gridplace :

답변

28

Tkinter형상 관리자 있습니다.
일반적으로 포장과 그리드를 권장합니다.

당신은 텍스트 위젯 옆에 스크롤을 배치합니다 grid manager's 옵션
을 사용할 수 있습니다.

는 텍스트의 yview 방법에 스크롤 위젯의 명령 옵션을 설정합니다.
scrollb = tki.Scrollbar(..., command=txt.yview) 

는 스크롤 막대의 방법을 설정에 텍스트 위젯의 yscrollcommand 옵션을 설정합니다.

import Tkinter as tki # Tkinter -> tkinter in Python3 

class App(object): 

    def __init__(self): 
     self.root = tki.Tk() 

    # create a Frame for the Text and Scrollbar 
     txt_frm = tki.Frame(self.root, width=600, height=600) 
     txt_frm.pack(fill="both", expand=True) 
     # ensure a consistent GUI size 
     txt_frm.grid_propagate(False) 
     # implement stretchability 
     txt_frm.grid_rowconfigure(0, weight=1) 
     txt_frm.grid_columnconfigure(0, weight=1) 

    # create a Text widget 
     self.txt = tki.Text(txt_frm, borderwidth=3, relief="sunken") 
     self.txt.config(font=("consolas", 12), undo=True, wrap='word') 
     self.txt.grid(row=0, column=0, sticky="nsew", padx=2, pady=2) 

    # create a Scrollbar and associate it with txt 
     scrollb = tki.Scrollbar(txt_frm, command=self.txt.yview) 
     scrollb.grid(row=0, column=1, sticky='nsew') 
     self.txt['yscrollcommand'] = scrollb.set 

app = App() 
app.root.mainloop() 

부분, 작은되는 것은 sticky='nsew' 당신이 약 → here 또는 here을 읽을 수
당신의 스크롤를 해결합니다

txt['yscrollcommand'] = scrollb.set 

다음은 작업 예입니다. 당신이 지금 배울 도움이 될 것입니다

뭔가가 같은 부모를 공유하지 않는 한 다른 Tkinter를 위젯만큼 동일한 프로그램 내의 다른 형상 관리자를 사용할 수 있다는 것입니다.


그것은 또한 ScrolledText 모듈 (Python3에 tkinter.scrolledtext 개명)이 있다는 것을 언급 할 가치가있다. 여기에는 복합 위젯 인 ScrolledText (텍스트 & 스크롤 막대)이라는 클래스가 포함되어 있습니다.

# Python 2.7 
import Tkinter as tki 
from ScrolledText import ScrolledText 

class App(object): 

    def __init__(self): 
     self.root = tki.Tk() 

    # create a Text widget with a Scrollbar attached 
     self.txt = ScrolledText(self.root, undo=True) 
     self.txt['font'] = ('consolas', '12') 
     self.txt.pack(expand=True, fill='both') 

app = App() 
app.root.mainloop() 
+0

감사합니다. 덕분에 많은 도움이되었습니다. 정말 감사. – jwebster

+2

"대개 장소 추천"을 "* 항상 * 장소 추천"으로 변경합니다. 장소는 유용하지만 드문 경우에만 해당됩니다. –

+0

@honestabe 어떻게 답변을 여러 섹션으로 나눌 수 있습니까? – xxmbabanexx

0

입력 상자로 작업하는 경우 scrolledtext 기능을 사용하는 편리한 방법입니다. 그것을 발견하는 데 4 시간 이상이 걸렸습니다. 나중에 틴 커를 사랑하지 않니? 을 tkscrolled하고 get (더 끔찍한 이름)을 사용하여 값 코드의

이 비트를 insert를 사용하여 읽기 기본 값을 설정 한

두 가지 추가 수입은 수입 tkinter.scrolledtext 필요 ... 주의해야 내 20 글자를 10 줄짜리 텍스트 입력 상자로 만드는 것이 핵심이었습니다.

import tkinter.scrolledtext as tkscrolled 
import tkinter as tk 

default_text = '1234' 
width, height = 20,10 
TKScrollTXT = tkscrolled.ScrolledText(10, width=width, height=height, wrap='word') 

# set default text if desired 
TKScrollTXT.insert(1.0, default_text) 
TKScrollTXT.pack(side=tk.LEFT) 

스크롤 막대는 통화에 정의 된대로 높이에 도달하면 나타납니다. 그들은 희미 해져 배경에 잘 섞여 있습니다. 그것은 훌륭한 일을 ..... 일단 당신이 올바른 전화를 알아낼 작동합니다.

귀하의 질문과 관련이 있기를 바랍니다.

관련 문제