首页 > 解决方案 > 使用 .grid 管理器的 tkinter 比例偏移位置

问题描述

我目前正在为学校 Python 评估编写一个简单的库存管理软件。我的 GUI 包括列出所有库存商品,并让用户能够一次库存/出售多个商品。这是通过在每个项目旁边放置一个条目(购买数量)和一个比例小部件(出售数量)并使用“应用”按钮来实施更改来实现的(对于上下文,场景是一家漫画书店):

https://i.imgur.com/7cesQm5.png

这是我用来从每个文件创建新小部件的代码(所有这些都包含在字典中,从 CSV 文件中提取):

itteration = 2

labels = {}

nameTitle = Label(main, text="Title").grid(row=1, column=1, padx=5)
stockTitle = Label(main, text="Stock").grid(row=1, column=2, padx=5)
buyTitle = Label(main, text="Amount to Buy").grid(row=1, column=3, padx=5)
sellTitle = Label(main, text="Amount to Sell").grid(row=1, column=4, padx=5)

for item in comic_books:

    name = item.replace(" ", "")
    nameStock = "{}Stock".format(item).replace(" ", "")
    nameBuy = "{}Buy".format(item).replace(" ", "")
    nameSell = "{}Sell".format(item).replace(" ", "")
    labels[name] = Label(main, text=item+":")
    labels[name].grid(column=1, row=itteration, padx=5)
    labels[nameStock] = Label(main, text=comic_books.get(item))
    labels[nameStock].grid(column=2, row=itteration, padx=5)
    labels[nameBuy] = Entry(main)
    labels[nameBuy].grid(column=3, row=itteration, padx=20)
    labels[nameSell] = Scale(main, from_=0, to=comic_books.get(item), orient=HORIZONTAL)
    labels[nameSell].grid(column=4, row=itteration, padx=5)
    itteration += 1

但是,我不喜欢刻度如何根据滑块的中心和顶部的数字在行中居中。这使滑块看起来低于它旁边的条目小部件。

https://i.imgur.com/9CQTvWS.png

我的问题是:我将如何将缩放小部件的位置从其原始位置向上偏移给定数量(可能是 5-10 像素?),以推动实际滑块与之前的条目小部件对齐?

如果您需要任何额外的说明,请告诉我

干杯,

-肖恩

标签: pythonpython-3.xtkinter

解决方案


使用sticky='s'andsticky='n'粘在单元格的底部(南)和顶部(北)我得到了这个

在此处输入图像描述

我没有使用不同的值pady

import tkinter as tk

root = tk.Tk()

l = tk.Label(root, text='Label')
l.grid(column=1, row=0, padx=5, sticky='s', pady=10)

e = tk.Entry(root)
e.grid(column=2, row=0, padx=20, sticky='s', pady=10)

s = tk.Scale(root, from_=0, to=10, orient='horizontal')
s.grid(column=3, row=0, padx=5, sticky='n', pady=10)

root.mainloop()

使用一个小部件我得到了sticky这个pady=(0,20)

在此处输入图像描述

import tkinter as tk

root = tk.Tk()

l = tk.Label(root, text='Label')
l.grid(column=1, row=0, padx=5, sticky='s', pady=10)

e = tk.Entry(root)
e.grid(column=2, row=0, padx=20, sticky='s', pady=10)

s = tk.Scale(root, from_=0, to=10, orient='horizontal')
s.grid(column=3, row=0, padx=5, sticky='n', pady=(0,20))

root.mainloop()

推荐阅读