그리드에 두 개의 프레임이있는 문제가 있습니다. 하나는 상단에, 하나는 하단에 있습니다. 둘 다 프레임에 캔버스가 있습니다. 아래쪽 캔버스에는 스크롤바가 있습니다. 유일한 문제는 내가 아래로 스크롤하면 그 캔버스의 내용 (따라서 프레임)이 상단 프레임으로 스크롤된다는 것입니다. 이는 분명히 이상적이지 않습니다.Tkinter - 다른 프레임으로 프레임 스크롤?
각각의 너비와 높이를 제한하지 않으려 고 시도했습니다. 자체 프레임을 떠나지 않고 프레임에서 내용이 "사라지게"할 수 있는지 궁금합니다. 웹에서 스크롤되는 모든 콘텐츠가이 작업을 수행하므로 방법이 있어야합니다.
내 코드는 다음과 같습니다. "test"는 위쪽 캔버스이고 "testCanvas"는 아래쪽 프레임에 만들어진 아래쪽 캔버스입니다. 보시다시피, "testCanvas"는 "test"로 스크롤됩니다. 나는 tutorialspoint, effbot 및 stackoverflow를 잘 보았지만 꽤 이해할 수는 없다.
#!/usr/bin/python
from struct import *
import array
import tkinter
from tkinter import *
from tkinter import ttk
root = Tk()
frame = Frame()
frame.pack()
root.minsize(width=230, height=70)
root.maxsize(width=1070, height=500)
IDlabel = ttk.Label(frame, text="Enter ID:")
IDlabel.pack()
IDentry = ttk.Entry(frame)
IDentry.pack()
def close():
root.quit()
def submit(event):
userIDentry = IDentry.get()
if userIDentry == '':
exit()
headerFrame = Frame(root, width=5, height=5)
headerFrame.grid(row=0, column=0)
channelFrame = Frame(root, width=720, height=400)
channelFrame.grid(row=1, column=0)
channelFrame.pack_propagate(0)
frame.destroy()
additionalFrame = Frame(root)
test = Canvas(headerFrame)
testCanvas = Canvas(channelFrame)
testCanvas.create_window((3,0), window=additionalFrame, anchor=NW)
vbar = Scrollbar(channelFrame, orient=VERTICAL)
vbar.pack(side=RIGHT, fill=Y)
vbar.config(command=testCanvas.yview)
sampleOutput = ttk.Label(test, text="Sample")
sampleOutput.grid(row=1, column=1)
secondFrameOutput = ttk.Label(additionalFrame, text="My scrolling behavior is off", font="Verdana 10 bold")
secondFrameOutput.grid(row=0, column=1)
closeButton = ttk.Button(additionalFrame, text="Close", command=close)
closeButton.grid(row=1, column=2)
testCanvas.config(width=2200, height=600)
testCanvas.config(yscrollcommand=vbar.set)
testCanvas.pack()
testCanvas.config(scrollregion=(0,0,700,1145))
test.config(width=50, height=50)
test.pack()
root.bind('<Return>', submit)
submitButton = ttk.Button(frame, text="Submit", command=submit)
submitButton.bind('<Button-1>', submit)
submitButton.pack()
root.mainloop()
귀하의 질문은 명확하지 않습니다. 두 프레임이 있다고하지만, ""testCanvas는 "아래쪽 프레임"이라고 말합니다. 프레임이나 캔버스에 대해 이야기하고 있습니까? –
죄송합니다, Bryan. 나는 물건이 섞여있어. 여기에 필요한 변경을하겠습니다. 저는 testCanvas가 아래쪽 프레임에 인스턴스화 된 캔버스라고 말하고자합니다. 그 밖의 무엇이 당신을 혼동시키는 찾아내는가? – KlayT