Python - tkinter删除滚动条和条目小部件之间的空间

时间:2014-01-23 14:10:36

标签: python widget tkinter scrollbar

在我的程序中,我有一个ttk.Scrollbar,它与只读ttk.Entry小部件配合使用。我遇到的问题是条目小部件的底部和滚动条小部件的顶部之间存在间距。我想摆脱它,但tkinter不允许你使用负填充等。

出于某种原因,滚动条是唯一一个自然放置pady属性的小部件。

下面是代码,滚动条窗口小部件和相关条目窗口小部件已注释掉。

from tkinter import *  
from tkinter import ttk 

def calculate(*args):   
    try:   
        value = int(binary.get(), 2)    
        decimal.set(value) 
    except ValueError:  
        error = "Please enter a binary value."
        decimal.set(error)
        pass    

root = Tk()     #set object `root` to `Tk()`
root.title("Binary to Decimal Converter")   
root.wm_iconbitmap("binaryicon.ico")    
root.grid_columnconfigure(0, weight = 1)
root.resizable(False, False)

mainframe = ttk.Frame(root, padding = "3 3 12 12")  
mainframe.grid(column = 0, row = 0, sticky = (N, W, E, S))  
mainframe.columnconfigure(0, weight = 1) 
mainframe.rowconfigure(0, weight = 1)

binary = StringVar()    
decimal = StringVar()   

binary_entry = ttk.Entry(mainframe, width = 32, textvariable = binary)
binary_entry.grid(column = 2, row = 1, sticky = (W, E))

"""decimalView = ttk.Entry(mainframe, state = "readonly", background = "gray99", width = 32, textvariable = decimal)
decimalView.grid(column = 2, row = 2, sticky = W)
scrollbar = ttk.Scrollbar(mainframe, orient = HORIZONTAL, command = decimalView.xview)
scrollbar.grid(column = 2, row = 3, sticky = (N, S, E, W))
decimalView.configure(xscrollcommand = scrollbar.set)"""
ttk.Button(mainframe, text = "Calculate", command = calculate).grid(column = 3, row = 3, sticky = W)

ttk.Label(mainframe, text = "Binary").grid(column = 3, row = 1, sticky = W)
ttk.Label(mainframe, text = "Decimal").grid(column = 3, row = 2, sticky = W)

binary_entry.focus()
root.bind("<Return>", calculate)

root.mainloop()

1 个答案:

答案 0 :(得分:1)

在这种特定情况下,最简单的解决方案是使用sticky=(N, E, W)。您的代码目前使其粘贴到单元格的顶部和底部(NS),导致它在以太网中伸展或在单元格中居中(例如,在Mac上,滚动条是一个固定的大小,所以它们将居中而不是拉伸)。由于您希望它“粘贴”在紧靠其上方的小部件的底部,因此您不希望它也“粘住”到其自己单元格的底部。