![](/img/trans.png)
[英]python - _tkinter.TclError: unknown option "-bg" for ttk.Frame
[英]A _tkinter.TclError occured while trying to make a scrollable frame in python
所以我一直在尝试制作一个可滚动的框架。 我一直在搜索,这三个影响最大:
https://stackoverflow.com/questions/16188420/tkinter-scrollbar-for-frame\ https://stackoverflow.com/questions/3085696/adding-of-a-scrollbar-in-widget-group tkinter\ 如何在 Tkinter 中获得带有滚动条的框架?
我想出了以下代码:
from tkinter import *
class Test_tk_stuff():
def __init__(self):
self.screen = Tk()
self.screen.geometry("500x500")
self.structure()
self.screen.mainloop()
def scroller(self, canvas):
canvas.configure(scrollregion = canvas.bbox("all"))
def frame_expander(self, event):
canvas_width = event.width
self.canvas.itemconfig(self.frame, width = canvas_width)
def structure(self):
parent = Frame(self.screen)
parent.pack(expand = True, fill = BOTH)
self.canvas = Canvas(parent, bg = "green", highlightthickness = 0, relief = RAISED)
self.frame = Frame(self.canvas, bg = "blue")
myscrollbar = Scrollbar(parent, orient = "vertical", command = self.canvas.yview)
self.canvas.configure(yscrollcommand = myscrollbar.set)
myscrollbar.pack(side = RIGHT, fill = Y)
self.canvas.pack(side = LEFT, fill = BOTH, expand = True)
self.canvas.create_window((0, 0), window = self.frame)
# can't do: self.frame.pack(expand = True, fill = BOTH) because it will become unscrollable
# Event Bind
self.frame.bind("<Configure>", lambda event, canvas = self.canvas: self.scroller(self.canvas))
self.canvas.bind("<Configure>", self.frame_expander)
# initialize number of minimum columns
for num_columns in range(3):
self.frame.columnconfigure(num_columns, weight = 1)
a = "Button Text!"
# fill it to - 1.) test scrollbar 2.) actually using the frame inside
for place2 in range(10):
Button(self.frame, text = a, bg = "black", fg = "white").grid(row = place2, column = 1, sticky = "NSEW", ipady = 15)
if __name__ == "__main__":
Test_tk_stuff()
但不知何故,当我运行它时,它显示了一个 _tkinter.TclError。 我尝试搜索那是什么以及如何修复它,但是,如您所见,我无法修复它。
我的实现有问题吗? 提前致谢。
使用self.frame.config(width=canvas_width)
代替canvas.itemconfig()
canvas.itemconfig()
is used on canvas item returned by canvas.create_xxxxx()
functions, not on tkinter widget ( self.frame
).
保存 self.frame 的 canvas 项目 ID 并在self.frame
canvas.itemconfig()
中使用它:
def frame_expander(self, event):
canvas_width = event.width
self.canvas.itemconfig(self.frame_item, width=canvas_width)
def structure(self):
...
self.frame_item = self.canvas.create_window((0, 0), window = self.frame)
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.