我似乎无法弄清楚如何更新tkinter标签

时间:2020-07-22 23:12:44

标签: python tkinter python-imaging-library

我正在尝试编写脚本来接受图像,然后处理该图像并在其上放置一个网格。我还没有合并修改图像的脚本。我正在尝试为此做一个前端,我计划将脚本发布到DnD facebook组中,以供其他人用来将网格覆盖到他们的战场地图上。我似乎无法让GUI更新显示用户选择的图像的像素长度的标签。

    import tkinter as tk
    from tkinter import filedialog
    import imageGrid
    import sys
    from PIL import *
    from PIL import Image





    root= tk.Tk()
    root.withdraw()
    iWidth = tk.StringVar()
    iHeight = tk.StringVar()
    class pinger(tk.Tk):


def __init__(self, parent):
    tk.Tk.__init__(self, parent)
    self.parent = parent
    self.initialize()
    

def initialize(self):        
    self.grid()
    button = tk.Button(self,text="exit",command=lambda: closeProgram())
    button.grid(column=3,row=9)
    buttonOpen = tk.Button(self, text="Select an Image", command= lambda: openExplorer()
                           )
    buttonOpen.grid(column=2, row=2)
    labelSig = tk.Label(self, text='By Johnathan Keith, 2020. Ver 1.0')
    labelSig.grid(column=3,row=10)
    labelImgWidth = tk.Label(self, textvariable=iWidth)
    labelImgWidth.grid(column=2,row=3)
    labelStaticImg= tk.Label(self, text="Width of image, in pixels: ")
    labelStaticImg.grid(column=1,row=3)
    labelStaticHeight= tk.Label(self, text="Height of image, in pixels: ")
    labelStaticHeight.grid(column=3,row=3)
    labelImgHeight = tk.Label(self, textvariable=iHeight)
    labelImgHeight.grid(column=4,row=3)
    labelWidth = tk.Label(self, text='Enter the width of the grid, in pixels.')
    labelWidth.grid(column=4,row=2)
    labelDisclaim = tk.Label(self, text='Currently only works with jpegs')
    labelDisclaim.grid(column=2, row=1)

def openFile(imagefilename):
    Img = Image.open(imagefilename)
    height, width = Img.size
    iHeight.set(height)
    iWidth.set(width)
def closeProgram():
    app.destroy()
    sys.exit()
def openExplorer():
    app.filename= filedialog.askopenfilename(initialdir="/", title="Select an Image", filetypes=(("jpeg files", "*.jpg"),("all files", "*.*")))
    if app.filename:
       print(app.filename)
       pinger.openFile(app.filename)



if __name__ == "__main__":
    app = pinger(None)
    app.title('Image Gridder')
    app.minsize(height=680,width=480)
    app.mainloop()

我一直在搜索其他SE问题,但似乎没有一个与我的代码编写方式兼容。我正在尝试更新StringVar()的iWidth和iHeight,它们最终将允许用户指定他们希望网格如何覆盖图像的方式。我试图将它们移到整个代码中,移入和移出类,但没有任何效果。另外,StackExchange有点缩进,所以不要介意。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为您有两个 sortByDate(init, prox) { var dataInit = new Date(init.dt_inicio); var dataProx = new Date(prox.dt_inicio); if (dataInit.getTime() < dataProx.getTime()) { return -1; } else if (dataInit.getTime() > dataProx.getTime()) { return 1; } else { return 0; } } 实例:Tk()rootapp)。 StringVar pingeriWidthiHeight范围内,其他小部件在root范围内。因此,StringVars的内容不会显示在app内的小部件中。

您可以删除app的内容,并且仅将root作为app的唯一实例:

Tk()