Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何压缩这个Python Tkinter GUI输入代码?_Python_User Interface_Tkinter - Fatal编程技术网

如何压缩这个Python Tkinter GUI输入代码?

如何压缩这个Python Tkinter GUI输入代码?,python,user-interface,tkinter,Python,User Interface,Tkinter,我正在参加代码就地2021,在我的最后一个项目中,我使用Python和Tkinter开发了一个Madlibs生成器,代码是功能性的,按照我希望的方式工作,但显然它很长,很复杂。我希望你们中的一些人能提供一些建议,让我的代码更加简洁,并去掉任何不必要的行 我粘贴了下面的所有代码: from tkinter import * # initialize window root = Tk() canvas1 = Canvas(root, width=500, height=750) canvas1.p

我正在参加代码就地2021,在我的最后一个项目中,我使用Python和Tkinter开发了一个Madlibs生成器,代码是功能性的,按照我希望的方式工作,但显然它很长,很复杂。我希望你们中的一些人能提供一些建议,让我的代码更加简洁,并去掉任何不必要的行

我粘贴了下面的所有代码:

from tkinter import *

# initialize window
root = Tk()
canvas1 = Canvas(root, width=500, height=750)
canvas1.pack()
root.title('Mad Libs Generator')

# creates input fields for user to enter words
label1 = Label(root, text= 'Final Project Mad Libs Generator \n Enter your words below!' , font = ('helvetica', 20))
canvas1.create_window(250, 40, window=label1)

label2 = Label(root, text='Adverb:', font = ('helvetica', 15))
canvas1.create_window(150, 100, window=label2)

entry1 = Entry(root)
canvas1.create_window(300, 100, window=entry1)

label2 = Label(root, text='Noun:', font = ('helvetica', 15))
canvas1.create_window(150, 130, window=label2)

entry2 = Entry(root)
canvas1.create_window(300, 130, window=entry2)

label2 = Label(root, text='Liquid:', font = ('helvetica', 15))
canvas1.create_window(150, 160, window=label2)

entry3 = Entry(root)
canvas1.create_window(300, 160, window=entry3)

label2 = Label(root, text='Verb:', font = ('helvetica', 15))
canvas1.create_window(150, 190, window=label2)

entry5 = Entry(root)
canvas1.create_window(300, 190, window=entry5)

label2 = Label(root, text='Number:', font = ('helvetica', 15))
canvas1.create_window(150, 220, window=label2)

entry6 = Entry(root)
canvas1.create_window(300, 220, window=entry6)

label2 = Label(root, text='Noun(Plural):', font = ('helvetica', 15))
canvas1.create_window(150, 250, window=label2)

entry7 = Entry(root)
canvas1.create_window(300, 250, window=entry7)

label2 = Label(root, text='Verb:', font = ('helvetica', 15))
canvas1.create_window(150, 280, window=label2)

entry8 = Entry(root)
canvas1.create_window(300, 280, window=entry8)

label2 = Label(root, text='Adjective:', font = ('helvetica', 15))
canvas1.create_window(150, 310, window=label2)

entry9 = Entry(root)
canvas1.create_window(300, 310, window=entry9)

label2 = Label(root, text='Noun:', font = ('helvetica', 15))
canvas1.create_window(150, 340, window=label2)

entry10 = Entry(root)
canvas1.create_window(300, 340, window=entry10)

label2 = Label(root, text='Noun(Plural):', font = ('helvetica', 15))
canvas1.create_window(150, 370, window=label2)

entry11 = Entry(root)
canvas1.create_window(300, 370, window=entry11)

label2 = Label(root, text='Illness:', font = ('helvetica', 15))
canvas1.create_window(150, 400, window=label2)

entry12 = Entry(root)
canvas1.create_window(300, 400, window=entry12)

label2 = Label(root, text='Occupation:', font = ('helvetica', 15))
canvas1.create_window(150, 430, window=label2)

entry14 = Entry(root)
canvas1.create_window(300, 430, window=entry14)

label2 = Label(root, text='Body Part(Plural):', font = ('helvetica', 15))
canvas1.create_window(150, 460, window=label2)

entry15 = Entry(root)
canvas1.create_window(300, 460, window=entry15)

label2 = Label(root, text='Body Part:', font = ('helvetica', 15))
canvas1.create_window(150, 490, window=label2)

entry16 = Entry(root)
canvas1.create_window(300, 490, window=entry16)

# function that retrieves words and transfers them into the story
def generateMadLib():
    adverb=entry1.get()
    noun=entry2.get()
    liquid=entry3.get()
    verb=entry5.get()
    number=entry6.get()
    nounp=entry7.get()
    verb2=entry8.get()
    adjective=entry9.get()
    noun2=entry10.get()
    nounp2=entry11.get()
    illness=entry12.get()
    occupation=entry14.get()
    bodypartp=entry15.get()
    bodypart=entry16.get()

    label3 = Label(root, text= 'Here is your Mad Lib!', font = 'helvetica')
    canvas1.create_window(250, 580, window=label3)

    label4 = Label(root, text = ('In order to wash your face ' +adverb+ ' , you must wet your ' +noun+ ' in warm ' +liquid+'. \n Then, '+verb+' it across your face '+number+' times. This will wash off any remaining '+nounp+'. \n When you are done you should '+verb2+' the cloth in '+adjective+' water to clean it. \nYou should also wash your face with a '+noun2+' to keep it smooth and shiny. \n This will keep also keep away '+nounp2+'. Don`t worry. \n It is normal to experience '+illness+' the first time you try this. \n Consult your '+occupation+' if you break out in '+bodypartp+'. This works well on your '+bodypart+' too!'), font=('helvetica', 9))
    canvas1.create_window(250, 650, window=label4)

# button that calls the function to generate the completed story
button1 = Button(text='Generate  Lib!', command=generateMadLib, bg='red', fg='white', font=('helvetica', 9, 'bold'))
canvas1.create_window(250, 525, window=button1)

root.mainloop() 

如果对循环和列表使用
,则可以将代码减少一半

下面是一个示例,您可以根据需要修改以下代码:

从tkinter导入*
#初始化窗口
root=Tk()
root.title('Mad Libs Generator')
#创建输入字段供用户输入单词
label1=Label(root,text='Final Project Mad Libs Generator\n在下面输入您的文字!',font=('helvetica',20))
标签1.pack()
帧=帧(根)
frame.pack()
lst=[‘副词’、‘名词’、‘液体’、‘动词’、‘数字’、‘名词(复数)’,
‘动词’、‘形容词’、‘名词’、‘动词’、‘形容词’、‘名词(复数)’、‘疾病’,
‘职业’、‘身体部位(复数)’、‘身体部位’]
条目=[]
对于行,枚举中的x(lst):
Label(frame,text=f'{x}:').grid(row=row,column=0)
ent=输入(帧)
ent.grid(行=行,列=1)
entries.append(ent)
#函数,用于检索单词并将其传输到故事中
def generateMadLib():
story='为了洗你的脸{0},你必须在温暖的{2}中弄湿你的{1}。\n然后,{3}'\
“它在你脸上划过{4}次。这将洗掉所有剩余的{5}。\n当您\
“完成后,你应该把布放在水里清洗\你也应该洗衣服\
'使用{8}将您的脸保持光滑和有光泽。\n这也将保持距离'\
'{9}. 别担心\n第一次尝试此操作时会遇到{10}是正常的。\n'\
'如果在{12}发生冲突,请咨询您的{11}'\
“这对你的{13}也很有效!”。格式(*(条目中x的x.get())
label3=Label(root,text='这是你的Mad库!',font='helvetica')
标签3.pack()
label4=标签(根,文本=故事)
标签4.pack()
#按钮,调用函数以生成已完成的故事
button1=按钮(root,text='Generate Lib!',command=generateMadLib,bg='red',fg='white',
字体=('helvetica',9',粗体'))
按钮1.pack()
root.mainloop()

创建一个类并创建用于重复流程的函数?为什么要将所有小部件都放在
画布中
?只需使用
.grid
管理器。一旦引用被传递到窗口或其他容器中,就不需要保留引用,因此不需要单独的名称。由于标签和条目仅因文本位置不同而不同,因此可以创建函数来填充其余的内容。更好的是,您可以创建一个包含不同数据的条目列表,并在循环中处理它们。@RufusVS持有对所有tkinter小部件的引用是一个很好的做法。@TheLizzard我没有做过很多tkinter项目-我通常是wxPython用户。我学会了依靠容器来保存我的引用(除非我从外部访问它们)。这使得初始化更容易当我有一堆按钮或标签时,我只需在构建时使用
btn
lbl
的临时引用,然后将其放入。使剪切和粘贴更容易!有时StackOverflow是一种代码编写服务。。。但是这里的代码非常好。但是,在故事文本的替换字段中确实需要索引吗?@RufusVS不,在这种情况下不需要索引。我这样做是为了在故事中记录替换字段的数量。此外,OP会发现如果他/她想更改替换的顺序,它会很有用。