在Tkinter中彼此相邻的帧

时间:2017-07-15 19:58:22

标签: python tkinter

基本上我想在屏幕的一侧放置一个时钟,在另一侧放置文本,我使用帧。我怎样才能做到这一点。这是现在的样子:

我想这样做,以便时钟与同一行上的文字一致,但是单独的标签。请看看我的代码,看看你是否可以帮助我!

from tkinter import *
from tkinter import ttk
import time

root = Tk()
root.state("zoomed")  #to make it full screen

root.title("Vehicle Window Fitting - Management System")
root.configure(bg="grey80")

Title = Frame(root, width=675, height=50, bd=4, relief="ridge")
Title.pack(side=TOP, anchor='w')
titleLabel = Label(Title, font=('arial', 12, 'bold'), text="Vehicle Window Fitting - Management System", bd=5, anchor='w')
titleLabel.grid(row=0, column=0)

clockFrame = Frame(root, width=675, height=50, bd=4, relief="ridge")
clockFrame.pack(side=TOP, anchor='e')
clockLabel = Label(clockFrame, font=('arial', 12, 'bold'), bd=5, anchor='e')
clockLabel.grid(row=0, column=1)
curtime = ""

def tick():
    global curtime
    newtime = time.strftime('%H:%M:%S')
    if newtime != curtime:
        curtime = newtime
        clockLabel.config(text=curtime)
    clockLabel.after(200, tick)
tick()

Bottom = Frame(root, width=1350, height=50, bd=4, relief="ridge")
Bottom.pack(side=TOP)


root.mainloop()

3 个答案:

答案 0 :(得分:4)

一个问题是尝试混合packgrid布局管理器,因为它们不能很好地协同工作。以下是仅使用pack的内容。 (注意你可以使用帧中的任何一个,而不是同时使用两个。)

要在同一"行"上添加两个项目,已添加另一个名为Frame的{​​{1}},并且topFrametitleLabel小部件已嵌套在里面。这种分组允许它们在移动或定位时作为一个单元进行操作 - 自动影响它们,但保持它们相对的位置(clockFrameLEFT)。

我还删除了RIGHT全局变量,因为它并不是必需的(正如修改后的curtime函数所示)。

tick()

这是运行的样子:

screenshot

答案 1 :(得分:1)

使用grid(row=x, column=y)。它使相邻的物体放置更容易。 另外,考虑只使用一个框架。 您也不需要指定宽度(除非您使用pack/grid_propagate(0))。

frame_1 = Frame(root, width=675, height=50)
frame_1.pack(side=TOP)

title_lbl = Label(frame_1, text="Lol whateva", height=50, bd=4, font=('arial', 12, 'bold'), relief="ridge", anchor=wherever_you_need_this_to_be)
title_lbl.grid(row=n, column=n)

clock_lbl = Label(clockFrame, font=('arial', 12, 'bold'), bd=5, anchor=wherever_you_need_this_to_be)
clock_lbl.grid(row=n, column=n)

您也不需要多个框架,每个标签只需一个框架。这是一个坏主意,真的,它也消耗更多的时间和打字。

答案 2 :(得分:1)

我会为标题创建一个框架,并使用类似header.pack(side="top", fill="x")的内容。然后,我会将两个标签放在那个框架中,一个装在左边,一个装在右边。

然后我会添加第二帧来填充GUI的其余部分,所有其他小部件都会进入该空间。