我使用Python来解析日志文件中的条目,并使用Tkinter显示条目内容,到目前为止它非常好.输出是标签小部件的网格,但有时会有比屏幕上显示的行多的行.我想添加一个滚动条,看起来应该很容易,但我无法弄明白.
该文档暗示只有List,Textbox,Canvas和Entry小部件支持滚动条界面.这些似乎都不适合显示小部件网格.可以在Canvas小部件中放置任意小部件,但您似乎必须使用绝对坐标,因此我无法使用网格布局管理器?
我已经尝试将小部件网格放入框架,但这似乎不支持滚动条界面,所以这不起作用:
mainframe = Frame(root, yscrollcommand=scrollbar.set)
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议绕过这个限制吗?我不想在PyQt中重写并增加我的可执行图像大小,只需要添加一个滚动条!
我想在 Tkinter 窗口中显示很多子图,并且能够向下滚动以查看所有大小合适的图。但是,它全部打包,并且子图似乎并没有占用我图中允许的所有空间,而仅限制在窗口的空间内。我怎样才能让它更间隔开并使子图更大?
我已经尝试使用该tight_layout()选项进行不同的填充,更改了 Tkinter 的图形大小和其他参数,例如我的小部件中的fill或expand。
import tkinter as tk
from tkinter import Scrollbar
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
class ScrollableWindow:
def __init__(self, master, fig, **options):
master.geometry("%dx%d+0+0" % (800, 500))
master.focus_set()
fig_wrapper = tk.Frame(master, width=800, height=fig.get_figheight())
fig_wrapper.pack(fill=tk.BOTH, expand=True)
fig_canvas = FigureCanvasTkAgg(fig, master=fig_wrapper)
scrollbar = Scrollbar(fig_wrapper, orient=tk.VERTICAL, command=fig_canvas.get_tk_widget().yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
fig_canvas.get_tk_widget().pack(fill=tk.BOTH, side=tk.LEFT, expand=True)
fig_canvas.get_tk_widget().config(yscrollcommand = scrollbar.set, scrollregion=fig_canvas.get_tk_widget().bbox("all"), width=800, height=1000)
n_col, n_row = 3, 11
fig, axes = plt.subplots(figsize=(n_col,n_row*2), ncols=n_col, nrows=n_row)
for i …Run Code Online (Sandbox Code Playgroud) 我正在尝试调整画布的大小,以便当用户在窗口边缘使用“单击并拖动”调整窗口大小时,画布会填满整个窗口,但我没有成功。
我查看了以下其他问题:
问题 #1(以前发布过,但在这里没有帮助)
这个给了我我认为正确的方向,因为我在画布上绑定了一个配置。但是,我收到一个错误,提示“在 FrameWidth 中未定义‘画布’。”
Tkinter:如何在画布窗口中获取框架以扩展到画布的大小?
如果我修改函数调用和函数,那么我得到的错误是“TypeError: FrameWidth() missing 1 required positional argument: 'canvas'” 修改是
canvas.bind('<Configure>', self.FrameWidth(canvas))
def FrameWidth(self, event, canvas):
Run Code Online (Sandbox Code Playgroud)
问题#2(以前发布过,但在这里没有帮助)
我也看了这个问题:
但是这个问题正在解决一个行为不正常的滚动条。
问题 #3(以前发布过,但在这里没有帮助)
我也查看了这个问题并输入了 weight=1,但这并没有帮助:
Python TKinter:调整窗口大小时,框架和画布将水平扩展,但不会垂直扩展
任何意见,将不胜感激。
这是我的 MWE:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 3 04:39:43 2017
@author: davidc
"""
import tkinter as tk
class Selections(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.FifthLabelLeft = tk.Label(self,
text="""Riding""",
justify = tk.CENTER,
width=20,
padx = 10).grid(row=4, …Run Code Online (Sandbox Code Playgroud) 我希望我的滚动条位于框架的底部,我的文本小部件将整个框架填充到滚动条上方.我在这里找到了一些关于宽度配置的解决方案但是当我尝试用高度替换宽度时,它无法正常工作.
from tkinter import *
from tkinter import ttk
class MainView(Frame):
def FrameHeight(self, event):
canvas_height = event.height
self.canvas.itemconfig(self.canvas_frame, height=canvas_height)
def OnFrameConfigure(self, event):
self.canvas.config(scrollregion=self.canvas.bbox("all"))
def __init__(self, *args, **kwargs):
Frame.__init__(self, *args, **kwargs)
self.grid_columnconfigure(0, weight=1)
self.grid_rowconfigure(0, weight=1)
sensorsFrame = Frame(self)
sensorsFrame.grid(row=0, sticky="nsew")
sensorsFrame.grid_columnconfigure(0, weight=1)
sensorsFrame.grid_rowconfigure(0, weight=1)
self.canvas = Canvas(sensorsFrame)
self.sensorsStatsFrame = Frame(self.canvas)
self.canvas.grid_rowconfigure(0, weight=1)
self.sensorsStatsFrame.grid_rowconfigure(0, weight=1)
myscrollbar = Scrollbar(sensorsFrame,orient=HORIZONTAL,command=self.canvas.xview)
self.canvas.configure(xscrollcommand=myscrollbar.set)
self.canvas.pack(fill=BOTH, expand=1)
myscrollbar.pack(fill=X, expand=1)
test0 = Text(self.sensorsStatsFrame, state=DISABLED)
test1 = Text(self.sensorsStatsFrame, width=150)
test0.grid(column=0, row=0, sticky="nsew")
test1.grid(column=1, row=0, sticky="nsew")
self.canvas_frame = self.canvas.create_window((0,0),window=self.sensorsStatsFrame,anchor='nw') …Run Code Online (Sandbox Code Playgroud)