python - Tkinter - Canvas 并排问题

标签 python canvas tkinter

我在将 Canvas 并排放在脚本上时遇到问题。 我想创建 5 个盒子,每个盒子都由用户销售的汽车数量来满足,为了节省布局空间,我想将这 5 个盒子放在同一行(并排)

到目前为止,我使用下面的脚本得到了以下情况(框在彼此之下)

enter image description here

    Label(self.canvas, text='North', bg="gray", fg="black").pack() 
    self.nom4=Entry(self.canvas,width=10,bg="white",\
                   fg="blue")
    self.nom4.pack()

    Label(self.canvas, text='Northeast', bg="gray", fg="black").pack() 
    self.nom5=Entry(self.canvas,width=10,bg="white",\
                   fg="blue")
    self.nom5.pack()

    Label(self.canvas, text='Midwest', bg="gray", fg="black").pack() 
    self.nom6=Entry(self.canvas,width=10,bg="white",\
                   fg="blue")
    self.nom6.pack()

    Label(self.canvas, text='Southeast', bg="gray", fg="black").pack() 
    self.nom7=Entry(self.canvas,width=10,bg="white",\
                   fg="blue")
    self.nom7.pack()

    Label(self.canvas, text='South', bg="gray", fg="black").pack() 
    self.nom8=Entry(self.canvas,width=10,bg="white",\
                   fg="blue")
    self.nom8.pack()

如何将这些盒子并排放置? 提前致谢

最佳答案

一种解决方案是将“框”放入 Frame 中并使用 pack 显示它们将 side 选项设置为 'left':

from tkinter import *

root = Tk()

canvas = Canvas(root)


frame4 = Frame(canvas)
Label(frame4, text='North', bg="gray", fg="black").pack() 
nom4=Entry(frame4,width=10,bg="white", fg="blue")
nom4.pack()
frame4.pack(side='left')

frame5 = Frame(canvas)
Label(frame5, text='Northeast', bg="gray", fg="black").pack() 
nom5=Entry(frame5,width=10,bg="white", fg="blue")
nom5.pack()
frame5.pack(side='left')

frame6 = Frame(canvas)
Label(frame6, text='Midwest', bg="gray", fg="black").pack() 
nom6=Entry(frame6,width=10,bg="white", fg="blue")
nom6.pack()
frame6.pack(side='left')

frame7 = Frame(canvas)
Label(frame7, text='Southeast', bg="gray", fg="black").pack() 
nom7=Entry(frame7,width=10,bg="white", fg="blue")
nom7.pack()
frame7.pack(side='left')

frame8 = Frame(canvas)
Label(frame8, text='South', bg="gray", fg="black").pack() 
nom8=Entry(frame8,width=10,bg="white", fg="blue")
nom8.pack()
frame8.pack(side='left')


canvas.pack()

root.mainloop()

注意:这需要一个盒子类。

<小时/>

Box 类示例:

import tkinter as tk

class Box(tk.Frame):
    def __init__(self, master, cardinal_direction):
        super().__init__(master)

        tk.Label(self, text=cardinal_direction, bg="gray", fg="black").pack()
        self.entry = tk.Entry(self, width=10,bg="white", fg="blue")
        self.entry.pack()

if __name__ == '__main__':

    root = tk.Tk()

    canvas = tk.Canvas(root)

    boxes = dict()

    for card_dir in ['North', 'South', 'East', 'West']:
        boxes[card_dir] = Box(canvas, card_dir)
        boxes[card_dir].pack(side='left')

    canvas.pack()

    root.mainloop()

关于python - Tkinter - Canvas 并排问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48038174/

相关文章:

python - 如何从python中的文件中找到每个工作角色的平均工资

python - 在 Pandas 中方便地将 DatetimeIndex 拆分为日期和时间 MultiIndex

python - 如何将列数据类型从 'string ' 转换为 'boolean' 并保留 NaN?

python - 如何在 SQLAlchemy 中的 python 中回滚 dataframe.to_sql?

Python Tkinter 列表框解除默认选择的绑定(bind)

python - 在 Python TkInter 应用程序中检测 DPI/比例因子

javascript - 如何创建两个变量的变量

javascript - 制作 JavaScript 游戏的难度

javascript - 在上下文中使用 with 语句是个好主意吗?

python - tkinter 小部件的 cnf 参数