Программа Tkinter не работает при двойном щелчке - PullRequest
0 голосов
/ 26 сентября 2018

Я довольно новичок в tkinter и создал простую небольшую программу:

!python3

from tkinter import *
import tkinter.messagebox
import time

checked = False
pressed = False
rthat = False
rthat2 = False
fe = True

root = Tk()

def hw():
    print('Hello World!')

def custom():
    wp = input('Input: ')
    print(wp)

def Except():
    wp = input('Input: ')
    raise Exception(wp)

def ChCh():
    global checked
    if checked:
        checked = False
    else:
        checked = True

def cPop():
    global fe
    user = input('Input (WINDOW TITLE): ')
    user2 = input('Input (TEXT): ')
    user3 = input('What type do you want? ("ERROR"/"WARNING"/"INFO"): ')
    if user3 == 'INFO':
        tkinter.messagebox.showinfo(user, user2)
    elif user3 == 'ERROR':
        tkinter.messagebox.showerror(user, user2)
    elif user3 == 'WARNING':
        tkinter.messagebox.showwarning(user, user2)
    else:
        tkinter.messagebox.showinfo(user, user2)
    if fe:
        fe = False
        tkinter.messagebox.askquestion('First Experience', 'Was your experience with this program good?')

def destrth():
    explainL.destroy()
    check.destroy()
    Pass.destroy()
    BackB.destroy()
    Submit.destroy()
    startS()

def submitted():
    global Invalid, Unchecked, rthat, rthat2
    if checked:
        if Pass.get() == "banana":
            root.destroy()
        else:
            if rthat2:
                rthat2 = False
                Unchecked.destroy()
            if rthat:
                Invalid.destroy()
            Invalid = Label(root, text="Invalid password!", fg="red")
            rthat = True
            Invalid.pack()
    else:
        if rthat:
            rthat = False
            Invalid.destroy()
        if rthat2:
            Unchecked.destroy()
        Unchecked = Label(root, text="Please check the CheckBox!", fg="red")
        rthat2 = True
        Unchecked.pack()

def exit1():
    root.geometry("400x150")
    global explainL, check, Pass, BackB, Submit
    subMenu.destroy()
    ExitMenu.destroy()
    button.destroy()

    explainL = Label(root, text="Enter password: ")
    check = Checkbutton(root, text="I Agree to the fact that pressing SUBMIT will close this window.", command=ChCh)
    Pass = Entry(root)
    BackB = Button(root, text="BACK", command=destrth)
    Submit = Button(root, text="SUBMIT", command=submitted)
    explainL.pack()
    Pass.pack()
    check.pack()
    Submit.pack()
    BackB.pack(side=RIGHT)

def startS():
    root.geometry("200x220")
    global subMenu, button, ExitMenu
    if rthat2:
        Unchecked.destroy()
    if rthat:
        Invalid.destroy()

    button = Button(root, text="Quit", command=exit1, height=5, width=5)

    menu = Menu(root)
    root.config(menu=menu)

    subMenu = Menu(menu)
    menu.add_cascade(label="print", menu=subMenu)
    subMenu.add_command(label="Hello World!", command=hw)
    subMenu.add_command(label="Custom", command=custom)
    subMenu.add_separator()
    subMenu.add_command(label="Raise Exception (CUSTOM)", command=Except)
    subMenu.add_command(label="Show PopUp (CUSTOM)", command=cPop)

    ExitMenu = Menu(menu)
    menu.add_cascade(label="Exit", menu=ExitMenu)
    ExitMenu.add_command(label="Quit", command=exit1)

    button.pack(side=LEFT)
    button.place(relx=0.5, rely=0.5, anchor=CENTER)


startS()

root.mainloop()
time.sleep(7)

Этот код прекрасно работает, если я выполняю его, нажимая F5 в режиме IDLE, но когда я дважды щелкаю по ярлыку, он выдает эту ошибку:

Traceback (most recent call last):
  File "moreTk.py", line 3, in <module>
    import tkinter
  File "C:\Users\RolandPC\Desktop\tkinter.py", line 8, in <module>
    root = Tk()
NameError: name 'Tk' is not defined

Я пытался выполнить его из терминала, других сообщений в сети, но он просто выбрасывал эту ошибку / другой «не удалось импортировать» эту ошибку / NameErrors.Кроме того, когда я запустил программу, была создана папка ( pycache ), в которой есть файл с именем tkinter.cpython-37.pyc. Я использую python 3.7 в Windows 10, Python добавляется в PATHи другие мои установки python были отключены.

1 Ответ

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

На вашем рабочем столе есть файл с именем tkinter.py.Любая программа, которая включает рабочий стол в свой путь поиска модуля, не сможет найти встроенный модуль tkinter, потому что у них одинаковое имя.

Попробуйте переименовать этот файл в другое.

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