Следующий файл (Python 3.7) делает все, что должен. Когда я нажимаю кнопку «Открыть файл», открывается диалоговое окно «Askopenfilename».
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog as fd
from tkinter import messagebox
from os import path
class GUI(tk.Tk):
def __init__(self):
self.win=tk.Tk()
self.create_widgets()
def exitfcn(self):
result = tk.messagebox.askquestion('Warning', 'Exit?')
if result == 'yes':
self.win.destroy()
# Button callback
def getFileName(self):
self.fDir = path.dirname(__file__)
self.fname=fd.askopenfilename(parent=self.win, initialdir=self.fDir)
if self.fname != '':
self.getFile(self.fname)
def getFile(self, file):
print(self.fname)
def create_widgets(self):
self.mainButtons=ttk.Frame(self.win)
self.mainButtons.grid(column=0, row=0, padx=100, pady=200)
# Adding a Button - Open file
self.openFilebtn=ttk.Button(self.mainButtons, text='Open file', command=self.getFileName)
self.openFilebtn.grid(column=0, row=0, padx=10, pady=20)
# Adding a Button - Exit
self.exitbtn=ttk.Button(self.mainButtons, text='Exit', command=self.exitfcn)
self.exitbtn.grid(column=0, row=1)
gui = GUI()
gui.win.mainloop()
Когда я использую cx_Freeze (5.1.1) со следующим установочным файлом:
import os
import sys
from tkinter import filedialog
from cx_Freeze import setup, Executable
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
build_exe_options={
'packages':['tkinter', 'tkinter.filedialog', 'os'],
'include_files':[
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),]
}
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
executables=[Executable("dialog_test.py", base=base)]
setup(name='dialog_test',
version=0.1,
description='Test file for cx_Freezer',
options={"build_exe": build_exe_options},
executables=executables
)
Кнопка «Выход» работает, кнопка «Открыть файл» не открывает диалоговое окно «спросить имя файла». Где может быть проблема?