Python tk.Label内部函数失败

麦可

我三天前开始学习Python,所以我是这个领域的新手。我想要的是选择一个目录并在其中显示图像。当tk.Label在函数'click'之外时,它可以正常工作,但是在函数'click'中,则抛出:

 Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\*\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1549, in __call__
    return self.func(*args)
  File "C:/Users/*/PycharmProjects/first/app.py", line 90, in click
    tk.Label(gui, image=tk_image).grid(row=1, column=0) # THIS LINE FAILED
  File "C:\Users\*\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 2605, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
  File "C:\Users\*\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 2131, in __init__
    BaseWidget._setup(self, master, cnf)
  File "C:\Users\*\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 2109, in _setup
    self.tk = master.tk
AttributeError: 'str' object has no attribute 'tk'

可以请人解释一下吗?到目前为止,这是我的代码:

import tkinter as tk
from tkinter import Tk
from tkinter import Label
from tkinter import Button
# from tkinter import Image
# from tkinter import PhotoImage # conflict
# from tkinter import Frame
from tkinter import Menu
from tkinter import StringVar
# from tkinter import *
import tkinter.messagebox as mb
import tkinter.filedialog as fd
import getpass
import os
# import fnmatch
from PIL import Image, ImageTk
gui = Tk()
user = getpass.getuser()

gui.title('Project')
gui.configure(background='#4D4D4D') # top level styling
gui.geometry('800x400') # specify root window size and position

def about():
    mb.showinfo("About", "Line\nLine\nLine")

def help_box():
    mb.showinfo("Help", "Sorry, we can\'t help you at this moment", icon='question')

def exit_editor():
    if mb.askokcancel("Quit", "Do you really want to quit?"):
        gui.destroy()

# Disabled for testing
# gui.protocol('WM_DELETE_WINDOW', exit_editor) # override close button and redirect to exit_editor

menubar = Menu(gui)

# File menu,for open,save,save as and quit
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Exit", accelerator='Alt+F4', command=exit_editor)
menubar.add_cascade(label="File", menu=filemenu)

# About menu - Aboutus, Help
aboutmenu = Menu(menubar, tearoff=0)
aboutmenu.add_command(label="About", command=about)
aboutmenu.add_cascade(label="Help", command=help_box)
menubar.add_cascade(label="About",  menu=aboutmenu)

# Returning defined setting for widget
gui.config(menu=menubar)

browseLabel = StringVar()
browseLabel.set("Selecteer een map: ")

def click():
    ext = ['.jpg', '.JPG', '.jpeg', '.JPEG']
    matches = []
    path = fd.askdirectory(initialdir='C:/Users/%s' % user)
    if path != "":
        browseLabel.set(path)

    for gui, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(tuple(ext)):
                matches.append(os.path.join(gui, file))
                print(file)

    # THE SAME CODE FAILES INSIDE FUNCTION

    img = "C:/Foto's\\P5270026.JPG"
    size = 100, 100
    pil_image = Image.open(img)
    pil_image.thumbnail(size, Image.ANTIALIAS)
    tk_image = ImageTk.PhotoImage(pil_image)
    # tk.Label(gui, image=tk_image).grid(row=1, column=0) # THIS LINE FAILED

    for img in matches:
        print("Match is %r" % img)


# THIS CODE WORKS OUTSIDE FUNCTION

# img = "C:/Foto's\\P5270026.JPG"
# size = 100, 100
# pil_image = Image.open(img)
# pil_image.thumbnail(size, Image.ANTIALIAS)
# tk_image = ImageTk.PhotoImage(pil_image)
# tk.Label(gui, image=tk_image, bg='brown').grid(row=1, column=0)

Label(gui, textvariable=browseLabel, bg="#4D4D4D", fg="#ffffff").grid(row=0, column=0, sticky='e')
Button(gui, text="Bladeren", command=click).grid(row=0, column=1, padx=2, pady=2, sticky='w', columnspan=9)

gui.mainloop()
布莱恩·奥克利(Bryan Oakley)

您有一个名为的全局变量gui,其中包含对根窗口的引用。在函数中,您可以重用gui作为包含字符串的局部变量。不要出于两个不同的目的而使用相同的变量名。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python Tkinter实例没有属性“ tk”

来自分类Dev

Python Tk应用程序-允许多种语言

来自分类Dev

未为Tk配置Python

来自分类Dev

带有重音词的Python 3 tk入口系统错误

来自分类Dev

Python:从tk.Text获取URL列表并进行处理

来自分类Dev

Python3 tk。滚动条和焦点

来自分类Dev

在本地python上替换不稳定的Tcl / Tk

来自分类Dev

“ tk.call”函数在Python / Tkinter中做什么?

来自分类Dev

文字和按钮Python Tk GUI

来自分类Dev

当`tk.Scale`的值改变时,如何自动更新`tk.Label`?

来自分类Dev

在Python Tkinter的Tk类中使用Frame类

来自分类Dev

使用Tk在Python中单击更改矩形颜色

来自分类Dev

Python tk。使用Tab键设置小部件焦点

来自分类Dev

循环中的Tk Python组合框获取选定的数据

来自分类Dev

TTK按钮显示为TK按钮Python 3.8

来自分类Dev

Python,TK输入字段验证

来自分类Dev

Python:从tk.Text获取URL列表并进行处理

来自分类Dev

Python3 tk.Scrollbar和焦点

来自分类Dev

在本机python上替换不稳定的Tcl / Tk

来自分类Dev

禁用Python和Tk中的按钮

来自分类Dev

使用Queue时Tk python应用程序保持冻结

来自分类Dev

使用Tk在Python中单击更改矩形颜色

来自分类Dev

Python Tk()构造函数有哪些可用参数?

来自分类Dev

在python中使用tkinter Photoimage / Tk使用Singleton模式的问题

来自分类Dev

在本地python安装上导入tkinter:如果失败,则可能未为Tk配置Python

来自分类Dev

python tk画布中的不可见图像

来自分类Dev

Python Tkinter 让 Tk 覆盖整个屏幕(如全屏)

来自分类Dev

Tcl/Tk:函数内函数的变量范围

来自分类Dev

Python Tk inter - 使用绑定动态调整框架大小

Related 相关文章

热门标签

归档