双击时,Tkinter程序不起作用

时间:2018-09-26 12:32:28

标签: python tkinter

我对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)

如果我通过在IDLE中按F5来执行该代码,则该代码工作得很好,但是当我双击它的快捷方式时,它将抛出此错误:

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的文件。 我在Windows 10上使用python 3.7,将Python添加到PATH,并且禁用了其他的python安装。

1 个答案:

答案 0 :(得分:5)

您的桌面上有一个名为tkinter.py的文件。在其模块搜索路径中包含桌面的任何程序都将无法找到内置的tkinter模块,因为它们具有相同的名称。

尝试将该文件重命名为其他文件。