【问题标题】:Tkinter : Justifying two frames side by sideTkinter:并排对齐两个框架
【发布时间】:2020-10-13 05:40:31
【问题描述】:

我正在编写一个小游戏作为我的 UNI 项目的一部分,到目前为止我已经编写了以下代码:

import tkinter as tk
from tkinter import *
from tkinter import messagebox
import random

root = Tk()
linear_array = [i for i in range(1,26)]
random_array = []
removed_numbers=[]
number_to_send = None
num_to_recv = None

#Creating Frames
frame1 = Frame(root)
frame1.pack(side=TOP,fill=X)

frame2 = Frame(root)
frame2.pack(side=TOP,fill=X,padx=10,pady=10)

frame3 = Frame(root)
frame3.pack(side=TOP,fill=X,pady=5)

#Button click function
def numberClick(num,btn):
    global number_to_send
    #messagebox.showinfo('Message',str(num)+' is removed')
    number_to_send = num
    removed_numbers.append(num)
    btn.configure(text='X')
    btn.configure(bg='red',fg='white')
    btn.configure(state="disabled")
    print(removed_numbers)
    stmnt = str(num)+" was removed!!"
    textBox.delete('1.0', END)
    textBox.insert(END,stmnt)
    textBox.tag_add("center", 1.0, "end")

#Generating linear array and a random array from the linear array
for i in range(1,26):
    temp = random.choice(linear_array)
    linear_array.remove(temp)
    random_array.append(temp) 

#Generating Title bar
title = Label(frame1,text='B . I . N . G . O !!!',fg='red',bg='yellow')
title.config(font=("Courier", 30))
title.pack(side=TOP,fill=X)

#Generating a 5x5 Button matrix
rows=5
columns=5
btns = [[None for i in range(rows)] for j in range(columns)]
button_mapping = {}
for i in range(rows):
    for j in range(columns):
        num = random.choice(random_array)
        random_array.remove(num)
        btns[i][j]=Button(frame2, text = num , fg ='red',height = 3, width = 5)
        btns[i][j]['command']=lambda btn=btns[i][j],num=num: numberClick(num,btn)
        btns[i][j]['borderwidth'] = 2
        btns[i][j]['relief'] = "groove"
        btns[i][j].grid(row=i,column=j)
        button_mapping[num]=btns[i][j]

#Printing numbers which are deleted 
textBox = Text(frame3, height = 1, width = 28)
textBox.tag_configure("center", justify='center')
textBox.insert("1.0","Recently Deleted Number")
textBox.tag_add("center", 1.0, "end")
textBox.pack(side=TOP)
   
root.mainloop()

输出如图:

现在我想再添加两个框架,如下所示:

我该怎么做?我尝试了框架中的框架并将框架 2 对齐到 LEFT 并将 frame4 对齐到 RIGHT 但它没有成功。请帮忙。蒂亚!

【问题讨论】:

    标签: python python-3.x user-interface tkinter


    【解决方案1】:

    您可以创建一个框架,例如frame,保持两个帧(frame4frame5),然后设置side=LEFTframe2side=RIGHTframe。但是你需要改变包装框架的顺序如下:

    #Creating Frames
    frame1 = Frame(root)
    frame1.pack(side=TOP, fill=X)
    
    frame3 = Frame(root)
    frame3.pack(side=BOTTOM, fill=X, pady=5)
    
    frame2 = Frame(root)
    frame2.pack(side=LEFT, fill=Y, padx=10, pady=10)
    
    frame = Frame(root) # parent of frame4 and frame5
    frame.pack(side=RIGHT, fill=BOTH, expand=True, padx=10, pady=10)
    # make frame4 and frame5 use all the space
    frame.grid_columnconfigure(0, weight=1)
    frame.grid_rowconfigure(0, weight=1)
    frame.grid_rowconfigure(1, weight=1)
    

    然后您可以在frame 中创建frame4frame5,如下所示:

    frame4 = Frame(frame, bd=1, relief='solid')
    frame4.grid(sticky='nsew', padx=5, pady=5)
    
    frame4 = Frame(frame, bd=1, relief='solid')
    frame4.grid(sticky='nsew', padx=5, pady=5)
    

    还有输出:

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多