【发布时间】:2019-03-02 05:44:08
【问题描述】:
我是 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 安装被禁用。
【问题讨论】: