【问题标题】:How do we add a scroll bar when the entry boxes are more than the window height in tkinter?当输入框超过tkinter中的窗口高度时,我们如何添加滚动条?
【发布时间】:2019-07-19 13:23:51
【问题描述】:

首先,当输入的矩形数量小于 24 时,它可以正常工作。当我放置超过 24 个矩形时,输入框超过了窗口高度,我看不到它。当输入框的数量超过窗口高度时,我想在右侧使用滚动条。该文档暗示只有 List、Textbox、Canvas 和 Entry 小部件支持滚动条界面。那么,我该怎么做网格框呢?

注意:代码是可验证的。

from tkinter import *

temp_recta = []

def save_content(top):
    for j in range(0, int(rectangles.get()) * 2):
        temp_recta.append(rectangle_values[j].get())

    root = Toplevel()

    l1 = Label(root, text="Size of Sheet[Height]:")
    l1.grid(row=0, column=0)

    l2 = Label(root, text="Size of Sheet[Width]:")
    l2.grid(row=1, column=0)

    height = StringVar()
    e1 = Entry(root, textvariable=height)
    e1.grid(row=0, column=1)

    width = StringVar()
    e2 = Entry(root, textvariable=width)
    e2.grid(row=1, column=1)

    b5 = Button(root, text="Proceed", width=12, command=lambda: save_sheetsize(e1, e2, root))
    b5.grid(row=2, column=0)
    b6 = Button(root, text="Back", width=12, command=lambda: (root.destroy(), top.deiconify()))
    b6.grid(row=2, column=1)

    root.title("Sheet Size")

def save_sheetsize(e1, e2, root):
    global x
    global y
    x = float(e2.get())
    y = float(e1.get())
    root.destroy()
    window.destroy()

rectangle_values = []
x = 0
y = 0
k = 0

def open_window():
    window.withdraw()
    global k
    top = Toplevel()
    top.title("Rectangles")

    for i in range(0, int(rectangles.get()) * 2):
        if (i % 2) == 0:
            l4 = Label(top, text="Size of rectangle:")
            l4.grid(row=i, column=0)

        rectangle_values.append(StringVar())
        en = Entry(top, textvariable=rectangle_values[i])
        en.grid(row=i, column=1)


    b3 = Button(top, text="Save", width=12, command=lambda: (top.withdraw(), save_content(top)))
    b3.grid(row=int(rectangles.get()) * 2 + 1, column=0)
    b4 = Button(top, text="Back", width=12, command=lambda: (top.destroy(), window.deiconify()))
    b4.grid(row=int(rectangles.get()) * 2 + 1, column=1)
    k = int(rectangles.get())

window = Tk()

l3 = Label(window, text="Number of Rectangles:")
l3.grid(row=0, column=0)

rectangles = StringVar()
e3 = Entry(window, textvariable=rectangles)
e3.grid(row=0, column=1)

b1 = Button(window, text='Submit', width=12, command=open_window)
b1.grid(row=3, column=1)

window.title("Rectangle Configuration")
window.mainloop()

【问题讨论】:

  • 有一个叫做滚动条的小部件,只要按照任何在线教程/手册就可以了,例如。 effbot.org/tkinterbook/scrollbar.htm
  • 抱歉,我无法让它在我的窗口上工作。
  • 那么请分享你尝试过的代码,你遇到了什么错误/问题。
  • scrollbar.config,在这一行我不知道该写什么作为命令。

标签: python python-3.x tkinter jupyter


【解决方案1】:

这是一个简单的类来做到这一点。添加您的文本小部件,当您的窗口充满文本时,它会给您一个滚动条。

import tkinter
class Scrollbar:
    def __init__(self,text):
        self.frame = text.master
        self.text = text
        self.text.configure(wrap='none')
        self.for_x_view()
        self.for_y_view()

    def for_x_view(self):
        # scroll Bar x For width
        scroll_x=tkinter.Scrollbar(self.frame, orient='horizontal',command=self.text.xview)
        scroll_x.config(command=self.text.xview)
        self.text.configure(xscrollcommand=scroll_x.set)
        scroll_x.pack(side='bottom', fill='x', anchor='w')
        return

    def for_y_view(self):
        # Scroll Bar y For Height
        scroll_y = tkinter.Scrollbar(self.frame)
        scroll_y.config(command=self.text.yview)
        self.text.configure(yscrollcommand=scroll_y.set)
        scroll_y.pack(side='right', fill='y')       
        return


if __name__ == '__main__':
    root = tkinter.Tk()
    pad = tkinter.Text(root,wrap='none')
    Scrollbar(pad)
    pad.pack()
    root.mainloop()

【讨论】:

  • 就我而言,它是网格框。所以,我很困惑。所有的例子都是关于列表的。
  • 所以只需用 scroll_x .grid() 替换 scroll_x.pack() 就可以了。也可以使用 y。
  • 我没听懂
  • 您可以将它们放在一个框架中,然后将滚动条应用于框架。
猜你喜欢
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2013-02-19
  • 1970-01-01
  • 2011-08-29
  • 2018-04-07
相关资源
最近更新 更多