如何在tkinter python中获取按钮网格化的框架名称

问题描述 投票:0回答:1

我正在尝试在 tkinter python 中制作超级井字游戏。如果我单击窗口中的任何按钮,标签就会打包在新的 tkinter 框架中。 我希望标签位于单击的按钮的位置。

P.S 不要单击第一个框,该按钮返回的值与其他框不同。从顶部的方框 2 开始尝试

from tkinter import *

root= Tk()
root.geometry("180x283")
root.state("zoomed")
count = root.counter = 0

#               || Frames ||

box1= Frame(root , borderwidth=2 , relief="solid")
box1.grid(row=0, column=0 , padx=2 , pady=2)

box2= Frame(root , borderwidth=2 , relief="solid")
box2.grid(row=0, column=1, padx=2 , pady=2)

box3= Frame(root , borderwidth=2 , relief="solid")
box3.grid(row=0 , column=2, padx=2 , pady=2)

box4= Frame(root , borderwidth=2 , relief="solid")
box4.grid(row=1, column=0, padx=2 , pady=2)

box5= Frame(root , borderwidth=2 , relief="solid")
box5.grid(row=1, column=1, padx=2 , pady=2)

box6= Frame(root , borderwidth=2 , relief="solid")
box6.grid(row=1, column=2, padx=2 , pady=2)

box7= Frame(root , borderwidth=2 , relief="solid")
box7.grid(row=2, column=0, padx=2 , pady=2)

box8= Frame(root , borderwidth=2 , relief="solid")
box8.grid(row=2, column=1, padx=2 , pady=2)

box9= Frame(root , borderwidth=2 , relief="solid")
box9.grid(row=2, column=2, padx=2 , pady=2)

#                  || Box Values ||

b1=(1_1, 1_2, 1_3, 1_4, 1_5, 1_6, 1_7, 1_8, 1_9)
b2=(2_1, 2_2, 2_3, 2_4, 2_5, 2_6, 2_7, 2_8, 2_9)
b3=(3_1, 3_2, 3_3, 3_4, 3_5, 3_6, 3_7, 3_8, 3_9)
b4=(4_1, 4_2, 4_3, 4_4, 4_5, 4_6, 4_7, 4_8, 4_9)
b5=(5_1, 5_2, 5_3, 5_4, 5_5, 5_6, 5_7, 5_8, 5_9)
b6=(6_1, 6_2, 6_3, 6_4, 6_5, 6_6, 6_7, 6_8, 6_9)
b7=(7_1, 7_2, 7_3, 7_4, 7_5, 7_6, 7_7, 7_8, 7_9)
b8=(8_1, 8_2, 8_3, 8_4, 8_5, 8_6, 8_7, 8_8, 8_9)
b9=(9_1, 9_2, 9_3, 9_4, 9_5, 9_6, 9_7, 9_8, 9_9)

#               || Box corresponding to the button no ||
dict= {1:"box1",2:"box2", 3: "box3", 4:"box4", 5:"box5", 6:"box6", 7:"box7",8:"box8", 9:"box9"}
dict_key = [1,2,3,4,5,6,7,8,9]
               

#               || Function to change Button to Label ||
def change(value):
    a = value.grid_info()
    value.grid_remove()
    x= a['row']
    y=a['column']
    padx=a['padx']
    pady=a['pady']
    global count
    
    val2 = (str(value)) #format=> .!frame2.!button2
    l=[]
    for  i in val2:
        l.append(i)
    
    frame_no = int((l[7]))
    
    frame_name = Tk((dict[frame_no]))
    
    if count %2 ==0:
        
        lab =Label(frame_name,text="X",height=5 , width=5, borderwidth=2 , relief="solid")
        lab.grid(row=x , column=y, padx=padx , pady=pady)
    else:
        
        lab =Label(frame_name,text="O",height=5 , width=5, borderwidth=2 , relief="solid")
        lab.grid(row=x , column=y, padx=padx , pady=pady)
    count+=1

   
#                   |--1st box--|
but1_1= Button(box1 , height=5 , width=5, command=lambda:change(but1_1))
but1_1.grid(row=0,column=0, padx=3,pady=2)

but1_2= Button(box1 , height=5 , width=5,command=lambda:change(but1_2))
but1_2.grid(row=0,column=1, padx=3,pady=2)

but1_3= Button(box1 , height=5 , width=5,command=lambda:change(but1_3))
but1_3.grid(row=0,column=2, padx=3,pady=2)

but1_4= Button(box1 , height=5 , width=5,command=lambda:change(but1_4))
but1_4.grid(row=1,column=0, padx=3,pady=2)

but1_5= Button(box1 , height=5 , width=5,command=lambda:change(but1_5))
but1_5.grid(row=1,column=1, padx=3,pady=2)

but1_6= Button(box1 , height=5 , width=5,command=lambda:change(but1_6))
but1_6.grid(row=1,column=2,padx=3,pady=2)

but1_7= Button(box1 , height=5 , width=5,command=lambda:change(but1_7))
but1_7.grid(row=2,column=0, padx=3,pady=2)

but1_8= Button(box1 , height=5 , width=5,command=lambda:change(but1_8))
but1_8.grid(row=2,column=1, padx=3,pady=2)

but1_9= Button(box1 , height=5 , width=5,command=lambda:change(but1_9))
but1_9.grid(row=2,column=2, padx=3,pady=2)

#                   |--2st box--|

but2_1= Button(box2 , height=5 , width=5, command=lambda:change(but2_1))
but2_1.grid(row=0,column=3, padx=3,pady=2)

but2_2= Button(box2 , height=5 , width=5,command=lambda:change(but2_2))
but2_2.grid(row=0,column=4, padx=3,pady=2)

but2_3= Button(box2 , height=5 , width=5,command=lambda:change(but2_3))
but2_3.grid(row=0,column=5, padx=3,pady=2)

but2_4= Button(box2 , height=5 , width=5,command=lambda:change(but2_4))
but2_4.grid(row=1,column=3, padx=3,pady=2)

but2_5= Button(box2 , height=5 , width=5,command=lambda:change(but2_5))
but2_5.grid(row=1,column=4, padx=3,pady=2)

but2_6= Button(box2 , height=5 , width=5,command=lambda:change(but2_6))
but2_6.grid(row=1,column=5,padx=3,pady=2)

but2_7= Button(box2 , height=5 , width=5,command=lambda:change(but2_7))
but2_7.grid(row=2,column=3, padx=3,pady=2)

but2_8= Button(box2 , height=5 , width=5,command=lambda:change(but2_8))
but2_8.grid(row=2,column=4, padx=3,pady=2)

but2_9= Button(box2 , height=5 , width=5,command=lambda:change(but2_9))
but2_9.grid(row=2,column=5, padx=3,pady=2)

#                   |--3rd box--|

but3_1= Button(box3 , height=5 , width=5, command=lambda:change(but3_1))
but3_1.grid(row=0,column=6, padx=3,pady=2)

but3_2= Button(box3 , height=5 , width=5,command=lambda:change(but3_2))
but3_2.grid(row=0,column=7, padx=3,pady=2)

but3_3= Button(box3 , height=5 , width=5,command=lambda:change(but3_3))
but3_3.grid(row=0,column=8, padx=3,pady=2)

but3_4= Button(box3 , height=5 , width=5,command=lambda:change(but3_4))
but3_4.grid(row=1,column=6, padx=3,pady=2)

but3_5= Button(box3 , height=5 , width=5,command=lambda:change(but3_5))
but3_5.grid(row=1,column=7, padx=3,pady=2)

but3_6= Button(box3 , height=5 , width=5,command=lambda:change(but3_6))
but3_6.grid(row=1,column=8,padx=3,pady=2)

but3_7= Button(box3 , height=5 , width=5,command=lambda:change(but3_7))
but3_7.grid(row=2,column=6, padx=3,pady=2)

but3_8= Button(box3 , height=5 , width=5,command=lambda:change(but3_8))
but3_8.grid(row=2,column=7, padx=3,pady=2)

but3_9= Button(box3 , height=5 , width=5,command=lambda:change(but3_9))
but3_9.grid(row=2,column=8, padx=3,pady=2)

#                   |--4th box--|
but4_1= Button(box4 , height=5 , width=5,command=lambda:change(but4_1))
but4_1.grid(row=3,column=0, padx=3,pady=2)

but4_2= Button(box4 , height=5 , width=5,command=lambda:change(but4_2))
but4_2.grid(row=3,column=1, padx=3,pady=2)

but4_3= Button(box4 , height=5 , width=5,command=lambda:change(but4_1))
but4_3.grid(row=3,column=2, padx=3,pady=2)

but4_4= Button(box4 , height=5 , width=5,command=lambda:change(but4_4))
but4_4.grid(row=4,column=0, padx=3,pady=2)

but4_5= Button(box4 , height=5 , width=5,command=lambda:change(but4_5))
but4_5.grid(row=4,column=1, padx=3,pady=2)

but4_6= Button(box4 , height=5 , width=5,command=lambda:change(but4_6))
but4_6.grid(row=4,column=2, padx=3,pady=2)

but4_7= Button(box4 , height=5 , width=5,command=lambda:change(but4_7))
but4_7.grid(row=5,column=0, padx=3,pady=2)

but4_8= Button(box4 , height=5 , width=5,command=lambda:change(but4_8))
but4_8.grid(row=5,column=1, padx=3,pady=2)

but4_9= Button(box4 , height=5 , width=5,command=lambda:change(but4_9))
but4_9.grid(row=5,column=2, padx=3,pady=2)

#                   |--5th box--|
but5_1= Button(box5 , height=5 , width=5, command=lambda:change(but5_1))
but5_1.grid(row=3,column=3, padx=3,pady=2)

but5_2= Button(box5 , height=5 , width=5,command=lambda:change(but5_2))
but5_2.grid(row=3,column=4, padx=3,pady=2)

but5_3= Button(box5 , height=5 , width=5,command=lambda:change(but5_3))
but5_3.grid(row=3,column=5, padx=3,pady=2)

but5_4= Button(box5 , height=5 , width=5,command=lambda:change(but5_4))
but5_4.grid(row=4,column=3, padx=3,pady=2)

but5_5= Button(box5 , height=5 , width=5,command=lambda:change(but5_5))
but5_5.grid(row=4,column=4, padx=3,pady=2)

but5_6= Button(box5 , height=5 , width=5,command=lambda:change(but5_6))
but5_6.grid(row=4,column=5,padx=3,pady=2)

but5_7= Button(box5 , height=5 , width=5,command=lambda:change(but5_7))
but5_7.grid(row=5,column=3, padx=3,pady=2)

but5_8= Button(box5 , height=5 , width=5,command=lambda:change(but5_8))
but5_8.grid(row=5,column=4, padx=3,pady=2)

but5_9= Button(box5 , height=5 , width=5,command=lambda:change(but5_9))
but5_9.grid(row=5,column=5, padx=3,pady=2)

#                   |--6th box--|

but6_1= Button(box6 , height=5 , width=5, command=lambda:change(but6_1))
but6_1.grid(row=3,column=6, padx=3,pady=2)

but6_2= Button(box6 , height=5 , width=5,command=lambda:change(but6_2))
but6_2.grid(row=3,column=7, padx=3,pady=2)

but6_3= Button(box6 , height=5 , width=5,command=lambda:change(but6_3))
but6_3.grid(row=3,column=8, padx=3,pady=2)

but6_4= Button(box6 , height=5 , width=5,command=lambda:change(but6_4))
but6_4.grid(row=4,column=6, padx=3,pady=2)

but6_5= Button(box6 , height=5 , width=5,command=lambda:change(but6_5))
but6_5.grid(row=4,column=7, padx=3,pady=2)

but6_6= Button(box6 , height=5 , width=5,command=lambda:change(but6_6))
but6_6.grid(row=4,column=8,padx=3,pady=2)

but6_7= Button(box6 , height=5 , width=5,command=lambda:change(but6_7))
but6_7.grid(row=5,column=6, padx=3,pady=2)

but6_8= Button(box6 , height=5 , width=5,command=lambda:change(but6_8))
but6_8.grid(row=5,column=7, padx=3,pady=2)

but6_9= Button(box6 , height=5 , width=5,command=lambda:change(but6_9))
but6_9.grid(row=5,column=8, padx=3,pady=2)

    enter code here

root.mainloop()
python tkinter tic-tac-toe
1个回答
0
投票
  • 运行您的代码,您提供的代码片段缺少根的定义和框架的创建,为了使 GUI 正常工作,您需要完成代码中缺少的部分并添加任何必要的事件处理或逻辑。
  • 当您单击按钮时,将打开一个新窗口,而不是更新同一窗口中的标签。这是因为
    change
    函数中的这一行。
frame_name = Tk((dict[frame_no]))

这会创建一个新的 Tkinter 窗口。

© www.soinside.com 2019 - 2024. All rights reserved.