Tkinter Python框架和滚动条

时间:2018-09-24 14:39:37

标签: python-3.x tkinter

我有以下代码将创建标签和条目小部件。我也为此窗口创建了滚动条,但是两个滚动条都不起作用。

请让我知道为什么禁用滚动条。代码做错了吗?

下面是我的代码,它将创建50个标签和条目小部件,但仍未启用滚动条。

import tkinter as tk
from tkinter import ttk


class DoubleScrollbarFrame(ttk.Frame):

def __init__(self, master, **kwargs):
    '''
      Initialisation. The DoubleScrollbarFrame consist of :
        - an horizontal scrollbar
        - a  vertical   scrollbar
        - a canvas in which the user can place sub-elements
    '''

    ttk.Frame.__init__(self, master, **kwargs)

    # Canvas creation with double scrollbar
    self.hscrollbar = ttk.Scrollbar(self, orient=tk.HORIZONTAL)
    self.vscrollbar = ttk.Scrollbar(self, orient=tk.VERTICAL)
    self.sizegrip = ttk.Sizegrip(self)
    self.canvas = tk.Canvas(self, bd=0, highlightthickness=0,
                            yscrollcommand=self.vscrollbar.set,
                            xscrollcommand=self.hscrollbar.set)
    self.vscrollbar.config(command=self.canvas.yview)
    self.hscrollbar.config(command=self.canvas.xview)

def pack(self, **kwargs):
    '''
      Pack the scrollbar and canvas correctly in order to recreate the 
      same look as MFC's windows.
    '''

    self.hscrollbar.pack(side=tk.BOTTOM, fill=tk.X, expand=tk.FALSE)
    self.vscrollbar.pack(side=tk.RIGHT, fill=tk.Y, expand=tk.FALSE)
    self.sizegrip.pack(in_=self.hscrollbar, side=tk.BOTTOM, anchor="se")

    self.canvas.pack(side=tk.LEFT, padx=5, pady=5,
                 fill=tk.BOTH, expand=tk.TRUE)

    ttk.Frame.pack(self, **kwargs)


def get_frame(self):
    '''
    Return the "frame" useful to place inner controls.
    '''
    return self.canvas


if __name__ == '__main__':
# Top-level frame
root = tk.Tk()
root.title("Double scrollbar with tkinter")
root.minsize(width=600, height=600)
frame = DoubleScrollbarFrame(root, relief="sunken")

# Add controls here
subframe = ttk.Frame(frame.get_frame())
txt = ttk.Label(subframe, text="Add things here !")

for i in range(50):
    ttk.Label(subframe, text="Field %d:  " % i).grid(row=i, column=0, 
sticky="w")
    ttk.Entry(subframe, width=25).grid(row=i, column=1, sticky="ew")

subframe.pack(padx=15, pady=15, fill=tk.BOTH, expand=tk.TRUE)
frame.pack(padx=5, pady=5, expand=True, fill=tk.BOTH)

# launch the GUI
root.mainloop()

0 个答案:

没有答案