Python 无法确定如何在TkInter GUI中阻止列和行移动

Python 无法确定如何在TkInter GUI中阻止列和行移动,python,python-3.x,tkinter,grid-layout,Python,Python 3.x,Tkinter,Grid Layout,因此,我正在为我的Python类做最后一个项目,并且正在使用TkInter为游戏创建GUI。我有一个小“精灵”,如果你愿意的话,它可以通过按下按钮在GUI中移动。我正试图弄明白,当“精灵”四处移动时,如何停止恼人的行和列大小调整。我还想知道如何检测一个单元是否被占用。如果我能以某种方式看到网格的网格线,那就太好了,但我认为这是不可能的,所以下一个最好的办法就是知道如何永久设置网格的列和行,并使它们不可更改。很抱歉,如果我不清楚我想要什么,我脑子里就有几十个想法 这是到目前为止我的代码 from

因此,我正在为我的Python类做最后一个项目,并且正在使用TkInter为游戏创建GUI。我有一个小“精灵”,如果你愿意的话,它可以通过按下按钮在GUI中移动。我正试图弄明白,当“精灵”四处移动时,如何停止恼人的行和列大小调整。我还想知道如何检测一个单元是否被占用。如果我能以某种方式看到网格的网格线,那就太好了,但我认为这是不可能的,所以下一个最好的办法就是知道如何永久设置网格的列和行,并使它们不可更改。很抱歉,如果我不清楚我想要什么,我脑子里就有几十个想法

这是到目前为止我的代码

from tkinter import *
from tkinter.constants import *

master= Tk()
master.resizable(width=False, height=False)

#for erasing displayed text when not needed anymore
wordsShowing = 0


#for testing button function with map movement
#url for image is http://files.softicons.com/download/game-icons/minecraft-avatars-icons-by-stefan-kroeber/png/50x50/slime.png if you want to see exactly what im seeing
pic = PhotoImage(file="C:\\Users\\Bill\\Desktop\\Python\\Final\\slime.png")
image = Label(master, image=pic)
image.grid(row=0, column=3, columnspan=1, rowspan=1, padx=0, pady=0)


#button functions (im not sure which buttons we will actually be using but im trying to cover all our bases)
def left():
    while wordsShowing == 1:
        varLabel.grid_remove()
        wordsShowing = 0
    info = image.grid_info()
    move = info["column"]
    stay = info["row"]
    if move > 0:
        image.grid_remove()
        image.grid(row=stay, column=move-1, columnspan=1, rowspan=1, padx=0, pady=0)
    else:
        varLabel = Label(master, text='Sorry, you can not go that direction.')
        varLabel.grid(row=1, column=2, rowspan=4)
        wordsShowing = 1
    global wordsShowing
    global varLabel

def right():
    while wordsShowing == 1:
        varLabel.grid_remove()
        wordsShowing = 0
    info = image.grid_info()
    move = info["column"]
    stay = info["row"]
    if move < 4:
        image.grid_remove()
        image.grid(row=stay, column=move+1, columnspan=1, rowspan=1, padx=0, pady=0)
    else:
        varLabel = Label(master, text='Sorry, you can not go that direction.')
        varLabel.grid(row=1, column=2, rowspan=4)
        wordsShowing = 1
    global wordsShowing
    global varLabel


def down():
    while wordsShowing == 1:
        varLabel.grid_remove()
        wordsShowing = 0
    info = image.grid_info()
    move = info["row"]
    stay = info["column"]
    if move < 5:
        image.grid_remove()
        image.grid(row=move+1, column=stay, columnspan=1, rowspan=1, padx=0, pady=0)
    else:
        varLabel = Label(master, text='Sorry, you can not go that direction.')
        varLabel.grid(row=1, column=2, rowspan=4)
        wordsShowing = 1
    global wordsShowing
    global varLabel


def up():
    while wordsShowing == 1:
        varLabel.grid_remove()
    wordsShowing = 0
    info = image.grid_info()
    move = info["row"]
    stay = info["column"]
    if move > 0:
        image.grid_remove()
        image.grid(row=move-1, column=stay, columnspan=1, rowspan=1, padx=0, pady=0)
    else:
        varLabel = Label(master, text='Sorry, you can not go that direction.')
        varLabel.grid(row=1, column=2, rowspan=4)
        wordsShowing = 1
    global wordsShowing
    global varLabel


def submit():
    var = command.get()
    varLabel = Label(master, text=var)
    varLabel.grid(row=1, column=2, rowspan=4)
    wordsShowing = 1
    global wordsShowing
    global varLabel


#created widgets
label1 = Label(master, text="Enter a command:")
command = Entry(master, width=80)
leftButton = Button(master, text="<", command=left)
rightButton = Button(master, text=">", command=right)
downButton = Button(master, text="v", command=down)
upButton = Button(master, text="^", command=up)
submitButton = Button(master, text="SUBMIT", command=submit)

#display widgets
label1.grid(row=5, column=1, sticky=E)
command.grid(row=5, column=2)
leftButton.grid(row=2, column=2, sticky=E, padx=3)
rightButton.grid(row=2, column=3)
downButton.grid(row=3, column=3, sticky=W)
upButton.grid(row=1, column=3, sticky=W)
submitButton.grid(row=5, column=3, pady=5, padx=5)
从tkinter导入*
从tkinter.constants导入*
master=Tk()
master.可调整大小(宽度=假,高度=假)
#用于在不再需要时擦除显示的文本
wordsShowing=0
#用于测试带有地图移动的按钮功能
#图像的url为http://files.softicons.com/download/game-icons/minecraft-avatars-icons-by-stefan-kroeber/png/50x50/slime.png 如果你想看到我所看到的
pic=PhotoImage(file=“C:\\Users\\Bill\\Desktop\\Python\\Final\\slime.png”)
图像=标签(母版,图像=图片)
image.grid(行=0,列=3,列span=1,行span=1,padx=0,pady=0)
#按钮功能(我不确定我们将实际使用哪些按钮,但我试图涵盖我们所有的基础)
def left():
当wordsShowing==1时:
varLabel.grid_remove()
wordsShowing=0
info=image.grid\u info()
移动=信息[“列”]
停留=信息[“行”]
如果移动>0:
image.grid_remove()
image.grid(行=stay,列=move-1,列span=1,行span=1,padx=0,pady=0)
其他:
varLabel=Label(master,text='对不起,您不能朝那个方向走。'))
varLabel.grid(行=1,列=2,行跨度=4)
文字显示=1
全球文字展示
全局变量标签
def right():
当wordsShowing==1时:
varLabel.grid_remove()
wordsShowing=0
info=image.grid\u info()
移动=信息[“列”]
停留=信息[“行”]
如果移动小于4:
image.grid_remove()
grid(行=停留,列=移动+1,列span=1,行span=1,padx=0,pady=0)
其他:
varLabel=Label(master,text='对不起,您不能朝那个方向走。'))
varLabel.grid(行=1,列=2,行跨度=4)
文字显示=1
全球文字展示
全局变量标签
def down():
当wordsShowing==1时:
varLabel.grid_remove()
wordsShowing=0
info=image.grid\u info()
移动=信息[“行”]
停留=信息[“列”]
如果移动小于5:
image.grid_remove()
grid(行=move+1,列=stay,列span=1,行span=1,padx=0,pady=0)
其他:
varLabel=Label(master,text='对不起,您不能朝那个方向走。'))
varLabel.grid(行=1,列=2,行跨度=4)
文字显示=1
全球文字展示
全局变量标签
def up():
当wordsShowing==1时:
varLabel.grid_remove()
wordsShowing=0
info=image.grid\u info()
移动=信息[“行”]
停留=信息[“列”]
如果移动>0:
image.grid_remove()
image.grid(行=move-1,列=stay,列span=1,行span=1,padx=0,pady=0)
其他:
varLabel=Label(master,text='对不起,您不能朝那个方向走。'))
varLabel.grid(行=1,列=2,行跨度=4)
文字显示=1
全球文字展示
全局变量标签
def submit():
var=command.get()
varLabel=Label(主控,文本=var)
varLabel.grid(行=1,列=2,行跨度=4)
文字显示=1
全球文字展示
全局变量标签
#创建的小部件
label1=标签(master,text=“输入命令:”)
命令=入口(主,宽度=80)
leftButton=按钮(主控,text=”“,command=右)
向下按钮=按钮(主控,text=“v”,命令=向下)
向上按钮=按钮(主控,文本=“^”,命令=向上)
submitButton=按钮(master,text=“SUBMIT”,command=SUBMIT)
#显示小部件
标签1.网格(行=5,列=1,粘性=E)
command.grid(行=5,列=2)
leftButton.grid(行=2,列=2,粘滞=E,padx=3)
rightButton.grid(行=2,列=3)
downButton.grid(行=3,列=3,粘性=W)
网格(行=1,列=3,粘性=W)
网格(行=5,列=3,pady=5,padx=5)

如果您能提供任何帮助,我们将不胜感激。谢谢。

可以使用函数.minsize设置每个网格单元的最小大小。如果您设置的最小大小始终大于放入每个单元格的小部件,则当您移动对象时,单元格的大小不会改变。请参阅本手册页:.

可以使用函数.minsize设置每个网格单元的最小大小。如果您设置的最小大小始终大于放入每个单元格的小部件,则当您移动对象时,单元格的大小不会改变。请参阅本手册页:。

如果您使用的是Python 3.X,那么您的代码会出现一些问题

  • 第一个问题是您试图使用
    .png
    文件,而
    PhotoImage
    类只接受
    .gif
    .pgm
    .ppm
    文件。您可以在以下位置阅读该文件:
  • 下一个问题是警告,您正在函数末尾将变量设置为
    global
    。python的工作方式是,如果在函数中声明了一个变量,那么它是本地的,所以通常在函数的开头告诉它,这个变量是全局的,然后继续修改它。如果不是,你不能确定你正在处理的变量是你想要的全局变量
  • 对于调整网格大小,最好的选择是将按钮放在网格内,网格内,使其大小独立于主网格中单元格的大小。最好是在一个框架上显示,而不是直接在母版上显示。我会将您的代码更改为类似(并替换WIDTH = 200 HEIGHT = 200 master= Tk() master.resizable(width=False, height=False) gridFrame = Frame(master, width=WIDTH, height=HEIGHT) gridFrame.grid() # Your function code goes here buttonGrid = Frame(gridFrame) buttonGrid.grid(row=4, column=3, sticky=N) # created widgets label1 = Label(gridFrame, text="Enter a command:") command = Entry(gridFrame, width=80) leftButton = Button(buttonGrid, text="<", command=left) rightButton = Button(buttonGrid, text=">", command=right) downButton = Button(buttonGrid, text="v", command=down) upButton = Button(buttonGrid, text="^", command=up) submitButton = Button(gridFrame, text="SUBMIT", command=submit) # display widgets label1.grid(row=5, column=1, sticky=E) command.grid(row=5, column=2) leftButton.grid(row=1, column=0, sticky=E) rightButton.grid(row=1, column=2, sticky=W) downButton.grid(row=2, column=1, sticky=N) upButton.grid(row=0, column=1, sticky=S) submitButton.grid(row=5, column=3, pady=5, padx=5)