Python 我能';我似乎不知道如何更新tkinter标签

Python 我能';我似乎不知道如何更新tkinter标签,python,tkinter,python-imaging-library,Python,Tkinter,Python Imaging Library,我正在尝试编写一个脚本来接受一个图像,然后处理该图像并在其上放置一个网格。我还没有合并修改图像的脚本。我正试图在这方面做一个前端,我正计划在DnD facebook群中发布脚本,供其他人用于将网格覆盖到他们的作战地图上。我似乎无法让GUI更新显示用户选择的图像像素长度的标签 import tkinter as tk from tkinter import filedialog import imageGrid import sys from PIL imp

我正在尝试编写一个脚本来接受一个图像,然后处理该图像并在其上放置一个网格。我还没有合并修改图像的脚本。我正试图在这方面做一个前端,我正计划在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)
我一直在搜索其他SE问题,它们似乎都不符合我的代码编写方式。我正在尝试更新StringVar()的iWidth和iHeight,这将最终允许用户指定他们希望网格如何覆盖图像。我试着在代码中移动它们,无论是在类内还是类外,都没有效果。另外,StackExchange有点破坏了缩进,所以别介意


谢谢大家!

这是因为您有两个
Tk()
的实例:
root
app
pinger
)。StringVar
iWidth
iHeight
root
范围内,其他小部件在
app
范围内。因此,StringVar的内容不会显示在
app
中的小部件中

您可以删除
root
内容,并且只有
app
作为
Tk()
的唯一实例:


不要将缩进错误归咎于Stackoverflow,它们表明您在粘贴和格式化代码时出错。请描述此代码的作用。这是一个错误吗?更新错误的标签?用错误的文本更新正确的标签?还有别的吗?@BryanOakley我只是无法更新标签,我花了几个小时试图弄清楚,但不明白我做错了什么。这是抛出错误,但没有一个对我真正有意义。我将尝试下面的答案,看看是否有效。谢谢你的评论:)谢谢你格式化我的意大利面代码,谢谢。我希望明天早上能测试一下!
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()
import tkinter as tk
from tkinter import filedialog
from PIL import Image

class pinger(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.initialize()

    def initialize(self):        
        self.iWidth = tk.StringVar()
        self.iHeight = tk.StringVar()

        # row 1
        labelDisclaim = tk.Label(self, text='Currently only works with jpegs')
        labelDisclaim.grid(column=2, row=1)

        # row 2
        labelWidth = tk.Label(self, text='Enter the width of the grid, in pixels.')
        labelWidth.grid(column=4,row=2)

        buttonOpen = tk.Button(self, text="Select an Image", command=self.openExplorer)
        buttonOpen.grid(column=2, row=2)

        # row 3
        labelStaticImg= tk.Label(self, text="Width of image, in pixels: ")
        labelStaticImg.grid(column=1,row=3)

        labelImgWidth = tk.Label(self, textvariable=self.iWidth)
        labelImgWidth.grid(column=2,row=3)

        labelStaticHeight= tk.Label(self, text="Height of image, in pixels: ")
        labelStaticHeight.grid(column=3,row=3)

        labelImgHeight = tk.Label(self, textvariable=self.iHeight)
        labelImgHeight.grid(column=4,row=3)

        # row 9
        button = tk.Button(self,text="exit",command=self.closeProgram)
        button.grid(column=3,row=9)

        # row 10
        labelSig = tk.Label(self, text='By Johnathan Keith, 2020. Ver 1.0')
        labelSig.grid(column=3,row=10)

    def openFile(self, imagefilename):
        Img = Image.open(imagefilename)
        height, width = Img.size
        self.iHeight.set(height)
        self.iWidth.set(width)

    def closeProgram(self):
        self.destroy()

    def openExplorer(self):
        filename= filedialog.askopenfilename(initialdir="/", title="Select an Image", filetypes=(("jpeg files", "*.jpg"),("all files", "*.*")))
        if filename:
           print(filename)
           self.openFile(filename)

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