python cx_Freeze askopenfile - PullRequest
       19

python cx_Freeze askopenfile

0 голосов
/ 08 сентября 2018

Следующий файл (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
)

Кнопка «Выход» работает, кнопка «Открыть файл» не открывает диалоговое окно «спросить имя файла». Где может быть проблема?

1 Ответ

0 голосов
/ 08 сентября 2018

В качестве альтернативы вы можете попробовать использовать pyinstaller вместо cx_freeze для создания замороженного приложения. Когда я замораживаю ваш скрипт с помощью pyinstaller, он создает замороженное приложение с правильно работающим диалогом открытия файла.

Вы можете установить пакет pyinstaller через pip:

pip install pyinstaller

и после этого вы можете создать замороженное приложение с помощью команды:

pyinstaller dialog_test.py
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...