ich habe einen kleinen Password-Generator in Python (3.6) geschrieben und dabei Tkinter verwendet. Nun wollte ich eine standalone-Version erstellen, wobei ich bei cx_Freeze gelandet bin. Mein Fehler sowie der Code der setup.py und der PasswordGen.py stehen unten.
Post Scriptum: Ich weiß, dass ich eigentlich Klassen nutzen sollte, hatte aber noch keine Zeit mich da reinzulesen

Danke im Voraus.
Der Fehler:

setup.py:
Code: Alles auswählen
import os
from cx_Freeze import setup, Executable
os.environ['TCL_LIBRARY'] = 'C:\\Users\\xxx\\AppData\\Local\\Programs\\Python\\Python36-32\\tcl\\tcl8.6'
os.environ['TK_LIBRARY'] = 'C:\\Users\\xxx\\AppData\\Local\\Programs\\Python\\Python36-32\\tcltk8.6'
# Dependencies are automatically detected, but it might need
# fine tuning.
buildOptions = dict(
packages = ['random', 'pyperclip'],
excludes = [],
include_files=['PWG.ico', 'C:\\Users\\xxx\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs\\tcl86t.dll', 'C:\\Users\\xxx\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs\\tk86t.dll']
)
import sys
base = 'Win32GUI' if sys.platform=='win32' else None
executables = [
Executable('PasswordGen.py', base=base)
]
setup(name='PasswordGenerator',
version = '1.0',
description = 'A simple, python-based, password generator',
options = dict(build_exe = buildOptions),
executables = executables)
Code: Alles auswählen
from tkinter import *
import random, pyperclip
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!?.:,;-_#+*"
var_width_big = 50
var_width_small = 20
var_width_extra = int(var_width_big + var_width_small + var_width_small - 7)
def generate():
length = int(length_entry.get())
password = ""
if length <51:
for c in range(length):
password += random.choice(chars)
output_entry.delete(0, END)
output_entry.insert(END, password)
def clearall():
length_entry.delete(0, END)
output_entry.delete(0, END)
name_entry.delete(0, END)
def clipboard():
print(output_entry.get)
pyperclip.copy(name_entry.get() + " - " + output_entry.get() + "\n")
pyperclip.paste()
def addlist():
textfile = open("list.txt", "a")
textfile.write(name_entry.get() + " - " + output_entry.get() + "\n")
textfile.close
root = Tk()
root.title("Password Generator")
root.resizable(0,0)
root.iconbitmap('PWG.ico')
length_lbl = Label(root, width=var_width_small - 7, text="Length (1-50)")
output_lbl = Label(root, width=var_width_small -7, text="Your Password")
name_lbl = Label(root, width=var_width_small -7, text="Related account")
length_entry = Entry(root, width=var_width_big, relief="solid", borderwidth=1)
output_entry = Entry(root, width=var_width_big, relief="solid", borderwidth=1)
name_entry = Entry(root, width=var_width_big, relief="solid", borderwidth=1)
clear_btn = Button(root, width=var_width_small, relief="solid", borderwidth=1, text="clear", command=clearall)
copy_btn = Button(root, width=var_width_small, relief="solid", borderwidth=1, text="copy", command=clipboard)
list_btn = Button(root, width=var_width_small, relief="solid", borderwidth=1, text="store in list", command=addlist)
generate_btn = Button(root, width=var_width_extra, relief="solid", borderwidth=1, text="GENERATE!", command=generate)
length_lbl.grid(row=1, column=1, pady=1, padx=1)
output_lbl.grid(row=2, column=1, pady=1, padx=1)
name_lbl.grid(row=3, column=1, pady=1, padx=1)
length_entry.grid(row=1, column=2, pady=1, padx=1)
output_entry.grid(row=2, column=2, pady=1, padx=1)
name_entry.grid(row=3, column=2, pady=1, padx=1)
clear_btn.grid(row=1, column=3, pady=1, padx=1)
copy_btn.grid(row=2, column=3, pady=1, padx=1)
list_btn.grid(row=3, column=3, pady=1, padx=1)
generate_btn.grid(row=4, column=1, columnspan=3)
root.mainloop()