我试图创建一个与tkinter接口。它应该在左边有一个控制面板,右边有一组3个标签。
选项卡将显示图像,这些图像对于屏幕来说可能太大,但是只有在程序动态创建图像后才能知道确切的大小。因此,我希望有一个笔记本
,它可以扩展以填充顶部窗口,如果图像对于笔记本框架来说太大,则应显示滚动条以允许看到所有图像。我找不到将滚动条连接到笔记本的方法,所以我将它们连接到笔记本内的画布上。
下面的代码扩展了画布以适应图像,但是滚动条是无用的,因为它会拉伸以适应画布,而画布比框架大,因此最终可能会出现在窗口之外。
我想我要将滚动区域设置为包含帧的大小。在Tkinter中动态更改画布的滚动区域似乎是相关的,但我不知道如何将其应用于我的代码:
import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk
class App(tk.Frame):
def __init__(self, parent, *args, **kwargs):
self.parent = parent
super().__init__(parent, *args, **kwargs)
self.pack(expand=True, fill=tk.BOTH)
self.inputframe = ttk.Frame(self)
self.inputframe.pack(side=tk.LEFT, expand=False, fill=tk.Y)
self.outputnotebook = ttk.Notebook(self)
self.outputnotebook.pack(side=tk.RIGHT, expand=True, fill=tk.BOTH)
self.build_inputframe()
self.build_outputnotebook()
def build_inputframe(self):
run_button = ttk.Button(self.inputframe, text="Run", command=self.draw)
run_button.grid(column=2, row=0, sticky=(tk.W, tk.E))
# rest of app...
def build_outputnotebook(self):
actnet_frame = ttk.Frame(self.outputnotebook)
critnet_frame = ttk.Frame(self.outputnotebook)
xscrollbar = ttk.Scrollbar(actnet_frame, orient=tk.HORIZONTAL)
xscrollbar.grid(row=1, column=0, sticky=tk.E + tk.W)
self.outputnotebook.add(
actnet_frame,
text="Tab 1",
sticky=tk.N + tk.S + tk.E + tk.W)
self.outputnotebook.add(critnet_frame, text="Tab 2")
self.actnet_canvas = tk.Canvas(actnet_frame, width=400, height=400,
xscrollcommand=xscrollbar.set)
self.actnet_canvas.grid(row=0, sticky=tk.N + tk.S + tk.E + tk.W)
xscrollbar.config(command=self.actnet_canvas.xview)
def draw(self):
act_image = Image.open('critnet.png') # image is 875 x 175
width, height = act_image.size
actphoto = ImageTk.PhotoImage(act_image)
self.actnet_canvas.delete("all")
self.actnet_canvas.create_image(0, 0, anchor=tk.NW, image=actphoto)
self.actnet_canvas.image = actphoto
self.actnet_canvas['scrollregion'] = (0, 0, width, height)
self.actnet_canvas['width'] = width
self.actnet_canvas['height'] = height
#do similar for other tabs.
root = tk.Tk()
root.geometry("800x600")
app = App(root)
app.mainloop()
代码中的问题是,您根据图片的大小调整了画布的大小,因此画布和scroll区域的大小是相同的。它让你的画布对你的标签和滚动条来说变得很大,毫无用处。
我把台词压下去了
self.actnet_canvas['width'] = width
self.actnet_canvas['height'] = height
从draw
函数中,滚动条的行为符合预期。
编辑:我错过了问题的另一部分。为了用窗口调整画布和滚动条的大小,我在build_outputnotebook
中添加了以下行:
actnet_frame.rowconfigure(0,weight=1)
actnet_frame.columnconfigure(0,weight=1)
我的目标是在一个有几个标签的框架中添加一个垂直滚动条。当框架内的标签超过框架的高度时,滚动条应该自动启用。经过搜索,我发现了这个有用的帖子。根据那篇文章,我明白为了实现我想要的,(如果我错了,请纠正我,我是一个初学者)我必须先创建一个框架,然后在框架内创建一个画布,并粘贴滚动条到那个框架。之后,创建另一个框架,并将其作为窗口对象放在画布内。所以,我终于想出了这个: 我这样做对吗?有没有更好/更聪明
我无法让x和y滚动条在使用Python的Tkinter中工作,尽管我已经遵循了多个示例: 如何在python 3.4中使用tkinter添加2个滚动条 在tkinter中添加滚动条到一组小部件 如何在tkinter中制作一个合适的双滚动条框架 垂直和水平滚动条上的Tkinter小部件 水平和垂直滚动画布小部件 滚动条会出现,但当窗口小于框架时不会激活。我怎样才能让它工作(见下图)? 下面是产生我的
问题内容: 我的目标是向具有多个标签的框架添加垂直滚动条。一旦框架内的标签超过框架的高度,滚动条应自动启用。搜索之后,我发现了这个有用的帖子。根据该帖子,我了解到要实现我想要的功能(如果我错了,请纠正我,我是一个初学者),我必须先创建一个,然后在该框架内创建一个并将滚动条粘贴到该框架上好。之后,创建另一个框架并将其作为窗口对象放在画布内。所以,我终于想出了这个: 我做对了吗?有没有更好/更聪明的方
Scrollbar 控件常用于创建一个水平或者垂直的滚动条,通常情况下,Scrollbar 控件可以与 Listbox、Text、Canvas 以及 Entry 等控件一起使。 滚动条控件是 GUI 程序中经常使用的一种控件类型,它主要用来控制控件区域的可见范围,比如当 Text 控件的文本内容非常多时,为了方便用户阅读,可以给 Text 控件增加滚动条,用户只需拖动滚动条就能完成内容的阅读。
我想打印我的html页面到一个PDF文件,但不想滚动条显示在那里的PDF文件。和我的页面有一个可滚动的主体,所以如果我设置如下: 在最终的pdf文件中,正文将是不完整的。那么,如果有一种方法,只是阻止滚动条显示,但内容仍然是可滚动的?
我拥有的是一个简单的,后跟两个子元素,和。 具有固定的高度,应填充剩余的空白空间。这很容易通过实现,但是由于某种原因,我不知道如何使元素溢出,以便在其内容超过网站窗口高度时工作? 这里是一个JSFiddle,如果您设置高度为,您可以看到元素很好地填充了空间,但是当大得多时元素不应该扩展现在的情况我错过了什么? 如果可能的话,我宁愿不使用JavaScript来解决这个问题。