首页 > 解决方案 > 关于 tkinter 目录路径

问题描述

我想在#here中插入文件的路径!但我的终端花费名称'dirname'未定义消息:(...

我不知道为什么会发生这个错误..我省略了一些代码:)...感谢您阅读

import tkinter
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
from PIL import Image
import pytesseract

def ask():
    dirname = filedialog.askopenfile(
        initialdir='C:/Users/PC/Desktop',
        title='파일 선택',
        filetypes=(('png 파일','*.png'), ('jpg 파일', '*jpg'), ('모든 파일 보기', '*.*'))
    )
    filename = tkinter.filedialog.asksaveasfilename()
    Txt.configure(text='경로 :' + dirname.name)

def ocr():
    pytesseract.pytesseract.tesseract_cmd = r'C:\Users\PC\AppData\Local\Tesseract-OCR\tesseract.exe'
    text = pytesseract.image_to_string(Image.open(#here!), lang="kor")
    print(text)

Txt = Label(window, text = ' ')
Txt.pack()

path_button = Button(window, text="경로 선택하기", command = ask)
path_button.pack()

button = Button (window, width = 10, text = "선택하기", overrelief="solid", command = ocr) # 확인 버튼
button.pack()

window.mainloop()

标签: pythontkinter

解决方案


ask()你设置变量:dirnamefilename

这两个变量默认设置为局部变量(它们在ask()函数外不可见)。这就是您无法访问它们的原因。

您可以通过将它们设置为全局来修补它:

#AFTER THE IMPORTS
filename = "some_default_filename.png"
dirname = "/some/default/path/"

#INSERT THIS AT THE BEGINNING OF ASK()
def ask():
    global filename
    global dirname

    filename = ..... #Your code

#YOU WILL BE ABLE TO ACCESS THEM TO OCR()
def ocr():
    #.......
    Image.open(dirname + filename)
    #.......

请注意,如果您不需要编辑变量,则不需要将其声明为全局的,python 将默认情况下假定。您仍然可以添加global dirnameglobal filename如果您愿意,代码也将运行。


推荐阅读