【发布时间】:2020-06-28 19:32:36
【问题描述】:
您好,我在画布上有一个框架。我想要一个按钮,每次按下按钮时都会向框架添加一个文本框。文本框被添加到它之前的文本框的右侧,一旦文本框太多,我希望能够使用滚动条来查看所有文本框。但由于某种原因,它不起作用。 提前感谢您的帮助。
代码如下:
from tkinter import *
import tkinter as tk # python 3
from tkinter import ttk
class Tkinter(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, SecondPage):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
frame.winfo_toplevel().geometry("1536x864")
frame.configure(bg='#151B1E')
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.canvas = Canvas(self, height=400, bg='black', highlightthickness=0, )
self.frame = tk.Frame(self.canvas)
self.frame.configure(bg='#151B1E')
self.frame.pack(fill='both', expand=True)
self.frame.bind("<Configure>", self.onFrameConfigure)
self.canvas.bind("<Configure>", self.onCanvasConfigure)
self.canvas.create_window((0, 0), window=self.frame, width=1336, anchor='nw', tags='self.frame')
self.canvas.place(x=20, y=200, relheight=0.7, relwidth=0.9674479167)
self.editbutton = Button(self, text='Add', command=lambda: self.add())
self.editbutton.pack()
self.myscrollbar = Scrollbar(self, orient="horizontal", command=self.canvas.xview)
self.myscrollbar.pack(side=BOTTOM, fill=X)
def onFrameConfigure(self, event):
'''Reset the scroll region to encompass the inner frame'''
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
def onCanvasConfigure(self, event):
# width is tweaked to account for window borders
width = event.width - 4
self.canvas.itemconfigure("self.frame", width=width)
def add(self):
self.t = Text(self.frame, bg='#171D1F', fg='white', highlightcolor='#12171A', borderwidth=0, width=40)
self.t.pack(side=tk.LEFT, padx=20)
self.frame.update() # update frame2 height so it's no longer 0 ( height is 0 when it has just been created )
self.canvas.configure(xscrollcommand=self.myscrollbar.set, scrollregion="0 0 0 %s" % self.frame.winfo_width())
class SecondPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
app = Tkinter()
app.mainloop()
【问题讨论】:
-
这是一个最小的复制示例,来自
class StartPage(tk.Frame):的所有代码都是相关的 -
虽然来自
StartPage的代码是相关的,但与多个页面相关的所有代码都不相关。您可以直接将StartPage放在根窗口中以简化示例。 -
哦,我明白了,我会的
标签: python tkinter canvas scrollbar frame