로그에서 생성된 레이블의 크기 표시와 함께 스크롤바를 통합할 수 없습니다. 파일 데이터는 Tkinter에서 문제를 야기합니다. 이 문제는 위젯 그리드를 표시하는 데 사용되는 것을 제외하고 스크롤 막대를 특정 위젯 유형으로 제한하기 때문에 발생합니다.
이 제한을 극복하기 위한 여러 솔루션이 있습니다. 더 간단한 수직 또는 수평 디스플레이를 위해 window_create 메소드와 결합된 텍스트 위젯이 실행 가능한 옵션을 제공합니다. 그러나 더 복잡한 레이아웃의 경우 이는 충분하지 않을 수 있습니다. 보다 포괄적인 방법은 관련 스크롤 막대가 있는 캔버스 위젯을 사용하는 것입니다. 이 캔버스 내에 라벨 위젯이 포함된 프레임을 포함합니다. 프레임 크기에 맞게 스크롤 영역 옵션을 조정하면 위젯의 스크롤을 효과적으로 활성화할 수 있습니다.
위젯을 캔버스에 직접 통합하는 것보다 프레임에 통합하는 것이 캔버스 스크롤 막대를 사용하므로 유리합니다. 특정 방법으로 생성된 아이템만 조작할 수 있습니다. 항목을 캔버스에 패키징하거나 배치하거나 격자로 표시하는 것은 스크롤 목적으로 인식되지 않습니다. 그러나 프레임은 해당 범위 내에서 이러한 방법을 허용하며 후속 창 생성으로 인해 프레임이 포함됩니다.
텍스트 요소를 캔버스에 직접 그리는 것도 또 다른 옵션입니다. . 이 접근 방식에서는 글꼴의 줄 높이를 결정해야 하며, 이후 각 텍스트 항목의 y 좌표를 정의합니다. X 좌표는 각 열의 가장 넓은 항목을 기준으로 고정된 상태로 유지됩니다. 열별로 항목에 태그를 지정하면 단일 명령을 통해 열 내의 모든 항목을 조정할 수 있습니다.
다음은 프레임 내장 캔버스의 객체 지향 구현입니다. 해결책:
import tkinter as tk</p> <p>class 예제(tk.Frame):</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def __init__(self, parent): tk.Frame.__init__(self, parent) self.canvas = tk.Canvas(self, borderwidth=0, background="#ffffff") self.frame = tk.Frame(self.canvas, background="#ffffff") self.vsb = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview) self.canvas.configure(yscrollcommand=self.vsb.set) self.vsb.pack(side="right", fill="y") self.canvas.pack(side="left", fill="both", expand=True) self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame") self.frame.bind("<Configure>", self.onFrameConfigure) self.populate() def populate(self): '''Put in some fake data''' for row in range(100): tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0) t="this is the second column for row %s" %row tk.Label(self.frame, text=t).grid(row=row, column=1) def onFrameConfigure(self, event): '''Reset the scroll region to encompass the inner frame''' self.canvas.configure(scrollregion=self.canvas.bbox("all"))
if name == "__main__":
root=tk.Tk() example = Example(root) example.pack(side="top", fill="both", expand=True) root.mainloop()
다음은 다음을 사용하지 않는 대체 솔루션입니다. 에이 class:
import tkinter as tk</p> <p>def populate(frame):</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">'''Put in some fake data''' for row in range(100): tk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0) t="this is the second column for row %s" %row tk.Label(frame, text=t).grid(row=row, column=1)
def onFrameConfigure(canvas):
'''Reset the scroll region to encompass the inner frame''' canvas.configure(scrollregion=canvas.bbox("all"))
루트 = tk.Tk()
캔버스 = tk.Canvas(root, borderwidth=0, background="#ffffff")
frame = tk.Frame(canvas, background="#ffffff")
vsb = tk.Scrollbar(root, orient="수직", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
canvas.pack(side="left", fill="both", Expand=True)
canvas.create_window(( 4,4), window=frame, 앵커="nw")
frame.bind("
채우기(프레임)
root.mainloop()
위 내용은 특히 로그 파일 데이터에서 생성된 많은 수의 레이블을 처리할 때 Tkinter의 위젯 그룹에 스크롤바를 어떻게 추가할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!