Python 我能';我似乎不知道如何更新tkinter标签
我正在尝试编写一个脚本来接受一个图像,然后处理该图像并在其上放置一个网格。我还没有合并修改图像的脚本。我正试图在这方面做一个前端,我正计划在DnD facebook群中发布脚本,供其他人用于将网格覆盖到他们的作战地图上。我似乎无法让GUI更新显示用户选择的图像像素长度的标签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
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
)。StringVariWidth
和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()