簡體   English   中英

我似乎無法弄清楚如何更新 tkinter 標簽

[英]I can't seem to figure out how to update tkinter labels

我正在嘗試編寫一個腳本來接受圖像,然后處理圖像並在其上放置一個網格。 我還沒有合並修改圖像的腳本。 我正在嘗試為此設置前端,我計划在 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,這最終將允許用戶指定他們希望網格如何覆蓋圖像。 我已經嘗試將它們移動到整個代碼中,進出 class,但沒有任何效果。 此外,StackExchange 有點破壞了縮進,所以不要介意。

謝謝!

這是因為您有兩個Tk()實例: rootapp ( pinger )。 StringVar iWidthiHeightroot scope 內,其他小部件在app scope 內。 所以 StringVars 的內容不會顯示在app內的小部件中。

您可以刪除root內容,並且僅將app作為Tk()的唯一實例:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM