我有一个问题,在一个网格上有两个框架;一个在上面,一个在底部。两人的相框都有一块画布。在底部画布中,我有一个滚动条。唯一的问题是,当我向下滚动时,画布(以及框架)的内容会滚动到顶部框架中,这显然不太理想。在
我试着限制每一个的宽度和高度都没有效果,我想知道是否有什么办法可以让内容在框架内“消失”,而不是只留下自己的框架。任何在网上滚动的内容都会这样做,所以必须有一种方法。在
这是我的代码;“test”是顶部画布,“testCanvas”是在底部框架中创建的底部画布。如您所见,“testCanvas”滚动到“test”。我试过阅读教程point、efffbot和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()
老实说,我认为你需要扔掉所有的代码重新开始。它有太多的错误,你试图解决一个含有太多未知变量的方程。在
例如,在根窗口中创建一个框架并打包,然后销毁它并使用grid添加一些其他小部件。虽然有可能做到这一点,但它使您很难掌握您的代码在做什么。这就是问题所在?是不是完全无关?你怎么知道的?在
您还创建了一个只有5x5像素的标题帧-为什么这么小?在代码顶部附近创建画布,然后在代码底部附近配置大小。你创建了一个标签,然后把它包装在画布上,在画布上做一些事情是可能的,但我怀疑它是否能做到你认为的那样。在
从创建单个帧的函数(或类)开始。忽略初始输入小部件和按钮,将焦点放在框架上。在该函数中添加一个顶部和底部框架。停下来,确保它们都出现在它们应该出现的地方,并且是你想要的尺寸。在开发过程中给它们不同的背景颜色,也许也给它们一个宽度和高度。让它工作,这样方程中的变量就少了一个。在调整窗口大小时,请确保if行为正常。在
接下来,只添加一个画布,并为该画布添加滚动条。停下来,确保它能正常工作,并确保你的框架继续以它们应该的方式运行。滚动条不会滚动,因为画布上没有内容,但这还不重要。在
在其余的小部件中继续这样做。在每个小部件正常工作之前,不要进行任何操作。在
要创建GUI,必须有条不紊。不要一开始就试图同时处理六个小部件。从一个或两个开始,让它们工作,再添加一个,等等。在
相关问题 更多 >
编程相关推荐