简体   繁体   English

Tkinter-画布并排发行

[英]Tkinter - canvas side by side issue

I'm having an issue to put canvas side by side on my script. 我在将画布并排放置在脚本上时遇到问题。 I want to create 5 boxes which each one will be fulfilled by user the quantity of cars sold, in order to save space on my layout, I want to put these 5 boxes in the same line (side by side) 我想创建5个盒子,每个盒子将由用户满足售出的汽车数量,为了节省空间,我想将这5个盒子放在同一行(并排)

So far, i got the following situation using the script below (boxes under each other) 到目前为止,我使用下面的脚本得到了以下情况(框下面的框)

在此处输入图片说明

    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()

How do i put these boxes side by side? 如何将这些盒子并排放置? Thanks in advance 提前致谢

One solution would be to put the 'boxes' in Frame s and display them using pack with side option is set as 'left' : 一种解决方案是将'box'放入Frame并使用pack with 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()

Note: This begs for a box class. 注意:这是针对Box类的。


Example with Box class: 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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM