簡體   English   中英

滾動條在Tkinter中使用網格布局滾動文本小部件

[英]Scrollbar to scroll Text widget, using Grid layout, in Tkinter

我試圖在Tkinter中使用網格布局管理器來創建一個對話框。 我希望底部的文本區域有一個滾動條。 不幸的是,我無法弄清楚如何使滾動條與它旁邊的文本小部件的高度相同。 下面的示例顯示滾動條位於正確位置但尺寸錯誤(僅占Text小部件高度的10%左右)。

tkinter網格和滾動條的布局問題

from tkinter import *

class queryrunner(Tk):
    def __init__(self,parent):
        Tk.__init__(self,parent)
        self.parent = parent
        self.minsize(width=800,height=500)
        self.initialize()

    def initialize(self):
        self.grid_columnconfigure(2,weight=1)
        self.grid_columnconfigure(3,weight=1)
        self.grid_columnconfigure(6,weight=2)
        self.grid_rowconfigure(0,weight=1)
        self.grid_rowconfigure(1,weight=1)
        self.grid_rowconfigure(2,weight=1)
        self.grid_rowconfigure(3,weight=1)
        self.grid_rowconfigure(4,weight=1)
        # BUCKET AND N1QL LABEL + INPUT PAIRS: 
        self.label = Label(self,text="Bucket", width=10, anchor="w")
        self.label.grid(column=0,row=0,columnspan=1,sticky='W')
        self.entry = Entry(self);
        self.entry.grid(column=1,row=0, columnspan=3, sticky='EW')
        self.entry.insert(0, "couchbase://couchbase1.mycompany.com/beer-sample" )
        # EXECUTE N1QL QUERY AGAINST BUCKET WHEN BUTTON CLICKED:
        self.button = Button(self,text="Go",width=20)
        self.button.grid(column=6,row=0)
        self.label2 = Label(self,text="N1QL", anchor="w")
        self.label2.grid(column=0,row=1,columnspan=1,sticky='W')
        self.entry2 = Text(self,height=5);
        self.entry2.grid(column=1,row=1, columnspan=3, rowspan=1, sticky='W')

        self.label3 = Label(self,text="Output:", width=50,anchor="w")
        self.label3.grid(column=0,row=4,columnspan=5,sticky='W')
        self.entry3 = Text(self,height=18)
        self.entry3.grid(column=1,row=5, columnspan=5, rowspan=1, sticky='W')
        # PROBLEM: GET SCROLLBAR TO BE THE RIGHT SIZE (IT'S NOT THE SIZE OF THE THING ITS BESIDE)
        self.scrollbar = Scrollbar(self) # height= not permitted here!
        self.entry3.config(yscrollcommand= self.scrollbar.set)
        self.scrollbar.config(command= self.entry3.yview)
        self.grid()
        self.scrollbar.grid(column=6, row=5, rowspan=2,  sticky='W')


if __name__ == "__main__":
    app = queryrunner(None)
    #font.nametofont('TkDefaultFont').configure(size = 10 )
    app.title('Couchbase N1QL Query Runner')
    app.mainloop()

將North和South添加到Scrollbar網格調用的粘性選項,以便滾動條在垂直方向上拉伸。

self.scrollbar.grid(column=6, row=5, rowspan=2,  sticky=N+S+W)

您只能在容器的每個子窗口小部件上使用一個幾何管理器,但如果子窗口小部件本身是容器,則可以使用您喜歡的任何幾何管理器作為其子窗口。 這意味着我們可以使用fill='y'參數創建一個Framepack() EntryScrollbar ,使Scrollbar填充可用空間。

改變這個:

self.entry3 = Text(self,height=18)
self.entry3.grid(column=1,row=5, columnspan=5, rowspan=1, sticky='W')
# PROBLEM: GET SCROLLBAR TO BE THE RIGHT SIZE (IT'S NOT THE SIZE OF THE THING ITS BESIDE)
self.scrollbar = Scrollbar(self) # height= not permitted here!
self.entry3.config(yscrollcommand= self.scrollbar.set)
self.scrollbar.config(command= self.entry3.yview)
self.grid()
self.scrollbar.grid(column=6, row=5, rowspan=2,  sticky='W')

對此:

self.frame = Frame(self)
self.frame.grid(column=1,row=5, columnspan=6, rowspan=1, sticky='W')
self.entry3 = Text(self.frame,height=18)
self.entry3.pack(side='left', fill='both', expand=True)
# PROBLEM: SOLVED
self.scrollbar = Scrollbar(self.frame) # height= not permitted here!
self.entry3.config(yscrollcommand= self.scrollbar.set)
self.scrollbar.config(command= self.entry3.yview)
self.grid()
self.scrollbar.pack(side='right', fill='y')

有ScrolledText模塊。

如果您使用的是Anaconda python發行版,那么在conda命令行中執行:

 conda install ScrolledText

然后在你的.py文件導入模塊中(如果python 3及以上)

 from tkinter.scrolledtext import ScrolledText

如果是python 2.7那么

 import ScrolledText

然后在python 3中將其稱為像普通的Text小部件一樣:

self.textBox = ScrolledText(self,borderwidth = 3,relief =“sunken”)

它是一個復合小部件(文本和滾動條)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM