我使用Python来解析日志文件中的条目,并使用Tkinter显示条目内容,到目前为止它非常好.输出是标签小部件的网格,但有时会有比屏幕上显示的行多的行.我想添加一个滚动条,看起来应该很容易,但我无法弄明白.
该文档暗示只有List,Textbox,Canvas和Entry小部件支持滚动条界面.这些似乎都不适合显示小部件网格.可以在Canvas小部件中放置任意小部件,但您似乎必须使用绝对坐标,因此我无法使用网格布局管理器?
我已经尝试将小部件网格放入框架,但这似乎不支持滚动条界面,所以这不起作用:
mainframe = Frame(root, yscrollcommand=scrollbar.set)
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议绕过这个限制吗?我不想在PyQt中重写并增加我的可执行图像大小,只需要添加一个滚动条!
我有这个可滚动的框架(实际上是画布内的框架).
import Tkinter as tk
class Scrollbarframe():
def __init__(self, parent,xsize,ysize,xcod,ycod):
def ScrollAll(event):
canvas1.configure(scrollregion=canvas1.bbox("all"),width=xsize,height=ysize,bg='white')
self.parent=parent
self.frame1=tk.Frame(parent,bg='white')
self.frame1.place(x=xcod,y=ycod)
canvas1=tk.Canvas(self.frame1)
self.frame2=tk.Frame(canvas1,bg='white',relief='groove',bd=1,width=1230,height=430)
scrollbar1=tk.Scrollbar(self.frame1,orient="vertical",command=canvas1.yview)
canvas1.configure(yscrollcommand=scrollbar1.set)
scrollbar1.pack(side="right",fill="y")
canvas1.pack(side="left")
canvas1.create_window((0,0),window=self.frame2,anchor='nw')
self.frame2.bind("<Configure>",ScrollAll)
Run Code Online (Sandbox Code Playgroud)
我想将鼠标滚轮绑定到滚动条,以便用户可以向下滚动框架,而无需使用滚动条上的箭头按钮.环顾四周后,我添加了一个canvas1像我这样的绑定
self.frame1.bind("<MouseWheel>", self.OnMouseWheel)
Run Code Online (Sandbox Code Playgroud)
这是功能:
def OnMouseWheel(self,event):
self.scrollbar1.yview("scroll",event.delta,"units")
return "break"
Run Code Online (Sandbox Code Playgroud)
但是当我使用鼠标滚轮时,滚动条不会移动.谁能帮我这个?我想要的只是当用户使用鼠标滚轮(在框架区域内/滚动条上)时,画布应自动向上或向下滚动.
我希望有一个Frame,用户可以根据应用程序的需要添加任意数量的文本字段.
应用程序以文本字段和该文本字段下方的按钮开始.当用户按下按钮时,将在第一个下方添加新的文本条目(这可以重复无数次).在窗口中间,会有一个Text小部件,用于显示文本:)
但是,我在文档中注意到了这一点:
This widget is used to implement scrolled listboxes, canvases, and text fields.
有没有办法使用的一种方法Scrollbar用Frame?
我有一个 Tkinter GUI,它显示一个 Matplotlib 图(Python 2.7.3 with Matplotlib 1.2.0rc2)并让用户配置图的某些方面。绘图往往会变大,因此图形被包裹在滚动画布中。配置图的一方面是改变其大小。
现在,一方面绘图正确滚动,另一方面调整大小也能正常工作,但这两种操作不能结合使用。下面是一个脚本来演示效果。(对不起,长度,我不能再短了。)您可以滚动绘图(使用滚动条),并且可以将其变得越来越小(使用按钮)。但是,无论何时滚动,图形都会重置为其原始大小。显然,我希望图形的大小不会因使用滚动条而改变。
import math
from Tkinter import Tk, Button, Frame, Canvas, Scrollbar
import Tkconstants
from matplotlib import pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
def addScrollingFigure(figure, frame):
# set up a canvas with scrollbars
canvas = Canvas(frame)
canvas.grid(row=0, column=0, sticky=Tkconstants.NSEW)
xScrollbar = Scrollbar(frame, orient=Tkconstants.HORIZONTAL)
yScrollbar = Scrollbar(frame)
xScrollbar.grid(row=1, column=0, sticky=Tkconstants.EW)
yScrollbar.grid(row=0, column=1, sticky=Tkconstants.NS)
canvas.config(xscrollcommand=xScrollbar.set)
xScrollbar.config(command=canvas.xview)
canvas.config(yscrollcommand=yScrollbar.set)
yScrollbar.config(command=canvas.yview)
# plug in the figure
figAgg = FigureCanvasTkAgg(figure, canvas)
mplCanvas = …Run Code Online (Sandbox Code Playgroud) 当用户决定输入更多输入时,如何使按钮在下面添加两个框(并排)?
def addBox():
labelframe = Tkinter.Frame()
labelframe.bind("<Add Input>", callback)
labelframe.pack()
labelframe = Tkinter.Frame()
labelFrom = Tkinter.Label(labelframe, text= "from")
labelFrom.grid(column=1, row=0)
e = Tkinter.Entry(labelframe)
e.grid(column=1, row=1)
labelTo = Tkinter.Label(labelframe, text= "to")
labelTo.grid(column=2, row=0)
e2 = Tkinter.Entry(labelframe)
e2.grid(column=2, row=1)
labelframe.pack()
addboxButton = Button( root,text='<Add Time Input>', fg="Red",command="addBox")
addboxButton.pack(side=Tkinter.TOP)
Run Code Online (Sandbox Code Playgroud)