【发布时间】:2016-11-27 19:12:20
【问题描述】:
我正在使用 tkinter 在 python 中创建一个 json 编辑器。
我通过创建Canvas 并在其中放入Frame 添加了一个滚动条。
然后我将Scrollbar 命令设置为canvas.yview。
有两件事搞砸了,我不知道为什么。
当我按下滚动按钮(向上和向下箭头)时,画布没有滚动
我现在将滚动条打包到窗口(根)而不是框架上,因为每当我将它打包到框架上时,tkinter 应用程序都不会打开,并且我的电脑风扇开始打开...有人知道这里发生了什么吗? (因此,如果您尝试运行代码,滚动条很小)
这是我的代码:
EDIT>代码缩短
import Tkinter as tk
import webbrowser
import os
import bjson as bj
class App:
def __init__(self, master):
self.window = master
self.window.geometry("800x450")
self.canvas = tk.Canvas(self.window, width=800, height=400)
self.master = tk.Frame(self.canvas, width=800, height=400)
self.canvas.pack()
self.master.place(x=0, y=0)
scrollbar = tk.Scrollbar(self.window)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
scrollbar.config(command=self.canvas.yview)
def init(self):
master = self.master
self.frames = {
"Home": HomeFrame(master)
}
self.openFrame = None
self.loadFrame("Home")
def loadFrame(self, frame):
self.openFrame = self.frames[frame]
self.openFrame.display()
def setTitle(self, t):
self.window.title(t)
class Frame:
def __init__(self, master):
self.master = master
self.frame = tk.Frame(master)
self.frame.grid(row=0, column=0, sticky='news')
self.init()
self.frame_create()
def display(self):
self.frame.tkraise() #raises frame to top
self.frame_load() #initializes the frame
def clear(self):
for widget in self.frame.winfo_children():
widget.destroy()
def init(self): pass
def frame_load(self): pass
def frame_create(self): pass
class HomeFrame(Frame):
def frame_create(self):
p = self.frame
for i in range(20):
tk.Label(p, text="This is content... " + str(i)).pack()
for j in range(2):
LineBreak(p)
def LineBreak(p):
tk.Label(p, text="").pack()
root = tk.Tk()
glob = {}
app = App(root)
app.init()
root.mainloop()
有点长,有点乱,但你应该看看我是如何在__init__ 的App 中添加滚动条的
任何人都知道发生了什么,以及如何解决它?
提前致谢!
【问题讨论】:
-
请尽可能删除所有代码,同时仍提供显示不良行为的示例。见How to create a Minimal, Complete and Verifiable Example
-
我已将代码更新为缩短版本,但仍然存在同样的问题。感谢您的帮助。
标签: python tkinter scrollbars