我正在尝试编写脚本来接受图像,然后处理该图像并在其上放置一个网格。我还没有合并修改图像的脚本。我正在尝试为此做一个前端,我计划将脚本发布到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有点缩进,所以不要介意。
谢谢!
答案 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()
和root
(app
)。 StringVar pinger
和iWidth
在iHeight
范围内,其他小部件在root
范围内。因此,StringVars的内容不会显示在app
内的小部件中。
您可以删除app
的内容,并且仅将root
作为app
的唯一实例:
Tk()