有没有办法让tkinter中的滚动条变长?

2024-09-28 22:35:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个tkinter列表框,它位于画布内的一个框架内。滚动条通过以下代码工作得非常好:

messagesList.config(yscrollcommand = scrollbar.set)
        scrollbar.config(command=messagesList.yview)

但是,我希望滚动条更长,这样我就可以真正滚动。我尝试了一些方法,比如用padx和pady使框架更大或占用更多空间。有没有办法让滚动条变长

当前状态的图像:

enter image description here

完整代码:

import tkinter as tk
from tkinter import ttk
import tkinter.font as tkFont

root = tk.Tk()
root.title("Messager")
root.geometry("1300x700")
root.resizable(height = 0, width = 0)
#makes window not resizable

class Elements:

    def __init__(self, main):

        def sendMessage():
            user = userName.get()
            message = userMessage.get()
            print(user+ " username")
            print(message + " message")

        theCan = tk.Canvas(main)
        titleFrame = tk.LabelFrame(main)
        mainFrame = tk.LabelFrame(theCan)
        greeting = tk.Label(titleFrame, text="Messager", bg = "#74a5f2", font = (None, 35))
        userName = tk.Entry(titleFrame, font = (None, 15))
        userName.insert(0, "An Unnamed Scrub")
        userMessage = tk.Entry(titleFrame, font = (None, 15))
        userMessage.insert(0,"Your Message")
        sendButton = tk.Button(titleFrame, command = sendMessage, text = "Send!", bg = "#74a5f2", font = (None, 22))
        titleMessage = tk.Label(mainFrame, text = "MESSAGER", bg = "#74a5f2", font = (None, 50))
        messagesList = tk.Listbox(mainFrame)
        scrollbar = tk.Scrollbar(mainFrame, orient=tk.VERTICAL, relief = 'flat')

        messagesList.config(yscrollcommand = scrollbar.set)
        scrollbar.config(command=messagesList.yview)


        testList = ["apple", "orange","apple", "orange","apple", "orange","apple", "orange","apple", "orange","apple", "orange","apple", "orange"]

        for item in testList:
            messagesList.insert(tk.END, item)

        placeholder = tk.Label(main, text = "    ")
        placeholder1 = tk.Label(main, text = "    ")
        placeholder2 = tk.Label(main, text = "    ")
        placeholder3 = tk.Label(main, text = "    ")
        placeholder4 = tk.Label(main, text = "    ")
        placeholder5 = tk.Label(main, text = "    ")
        placeholder6 = tk.Label(main, text = "    ")
        placeholder7 = tk.Label(main, text = "    ")
        placeholder8 = tk.Label(main, text = "    ")
        placeholder9 = tk.Label(main, text = "    ")
        placeholder10 = tk.Label(main, text = "    ")
        placeholder11 = tk.Label(main, text = "    ")
        placeholder12 = tk.Label(main, text = "    ")
        placeholder13 = tk.Label(main, text = "    ")
         

        placeholder.grid(row = 1, column = 1)
        placeholder1.grid(row = 2, column = 2)
        placeholder2.grid(row = 3, column = 3)
        placeholder3.grid(row = 4, column = 4)
        placeholder4.grid(row = 5, column = 5)
        placeholder5.grid(row = 6, column = 6)
        placeholder6.grid(row = 7, column = 7)
        placeholder7.grid(row = 8, column = 8)
        placeholder8.grid(row = 1, column = 9)
        placeholder9.grid(row = 1, column = 10)
        placeholder10.grid(row = 1, column = 11)
        placeholder11.grid(row = 1, column = 12)
        placeholder12.grid(row = 1, column = 13)
        placeholder13.grid(row = 1, column = 14)

        #placeholders to move the mainframe frame to the center


        titleFrame.grid(row = 1, padx = 20, pady = 20)

        greeting.grid(pady = 20)
        userName.grid()
        userMessage.grid(pady = 20)
        sendButton.grid()

        mainFrame.grid()
        titleMessage.grid(pady = 20)
        messagesList.grid()
        theCan.grid(row = 1, column = 15, pady = 20)

        scrollbar.grid(sticky = "ne", rowspan = 5)




postEverything = Elements(root)
root.mainloop()

Tags: textapplemaincolumnrootlabeltkgrid
1条回答
网友
1楼 · 发布于 2024-09-28 22:35:27

如前所述,您需要使用grid将框和滚动条放在同一行上

    messagesList = tk.Listbox(mainFrame)
    scrollbar = tk.Scrollbar(mainFrame, orient=tk.VERTICAL, relief = 'flat')

    messagesList.config(yscrollcommand = scrollbar.set)
    scrollbar.config(command=messagesList.yview)

    messagesList.grid(row=0,column=0)
    scrollbar.grid(row=0,column=1,sticky = "ns")

还请注意,我已经将sticky属性更改为“ns”,这意味着滚动条将拉伸以适合行并匹配messagesList小部件的高度

相关问题 更多 >