나는 스크롤을 포함하여 내 일반적인 양식 기능을 정의하는 기본 클래스를 가지고 있습니다.양식 크기 재조정 살인 형식 스크롤
자손 중 하나에 크기 재 지정 기능을 추가하고 스크롤을 중지했습니다.
다음 추출에서 양식이 스크롤됩니다. 한 줄의 주석을 해제하면 폼과 필드의 크기를 원하는대로 조정할 수 있지만 스크롤은 작동하지 않습니다.
누군가 도와 줄 수 있습니까?
from Tkinter import *
import ttk
class DisplayListWindow(Canvas):
def __init__(self, parent=None, *args, **kw):
Canvas.__init__(self,parent, borderwidth=0, *args, **kw)
self.frame = Frame(self)
vsb = Scrollbar(parent, orient="vertical", command=self.yview)
self.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
self.create_window((4,4), window=self.frame, anchor="nw",
tags="self.frame")
self.pack(side="left", fill="both", expand=True)
self.frame.bind("<Configure>", self.OnFrameConfigure)
#remaining code in this function is from descendant classes
for i in range(1, 20, 1):
ttk.Entry(master=self.frame, style='C.TEntry').grid(row = i, column = 0, sticky = NSEW)
ttk.Entry(master=self.frame, style='C.TEntry').grid(row = i, column = 1, sticky = NSEW)
self.frame.columnconfigure(1, weight=1)
#the following line enables the re-sizing behaviour, but kills scrolling
#self.frame.pack(side="left", fill="both", expand=True) # <== problem
#----------------------------------------------------------------------
def OnFrameConfigure(self, event):
'''Reset the scroll region to encompass the inner frame'''
self.configure(scrollregion=self.bbox("all"))
DisplayListWindow().mainloop()
답변 해 주셔서 감사합니다. 제안한대로 Configure 이벤트를 조정하면 내가 원하는 것이었던 컬럼 가중치를 존중한다는 것을 알 수 있습니다. 이것은 처음에 양식이 표시 될 때 발생하지만, 수동으로 양식의 크기를 조정하면 팩을 사용할 때처럼 프레임이 늘어나지 않습니다. 내가 묶어야 할 다른 사건이 있습니까? – BarryM
OK, 프레임의 크기가 조정되었을 때 프레임의 구성 이벤트가 호출되지 않고있는 것을 확인했습니다. 나는 당신의 코드로 또 하나의 함수를 만들고 그것을 자기 (캔버스)에 묶었 다. 코드 줄을 추가하여 프레임의 Configure 이벤트 "self.OnFrameConfigure (self.frame)"을 트리거합니다. 지금은 모두 잘 작동하는 것 같습니다. 감사합니다. 창문에서 프레임까지 이벤트를 물결 치는 더 우아하고 파이썬적인 방법이 있습니까? –
BarryM
@ BarryM : 귀하의 의견을 이해하지 못합니다. 원래 코드를 가져 와서 내 대답에 코드를 추가하면 ''이벤트가 제대로 작동합니다. 더 평범한 방법이 있는지 아닌지에 관해서는, 이것이 올바른 방법입니다. –