from tkinter import*
from tkinter import ttk
def printInfo():
# 清理entry2
entry2.delete(0, END)
# 根据输入半径计算面积
R=int(entry1.get())
S= 3.1415926*R*R
entry2.insert(10, S)
#清空entry2控件
entry1.delete(0, END)
#初始化Tk()
myWindow = Tk()
#设置标题
myWindow.title('Python GUI Learning')
width = 350
height = 350
#获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
screenwidth = myWindow.winfo_screenwidth()
screenheight = myWindow.winfo_screenheight()
alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
myWindow.geometry(alignstr)
#设置窗口是否可变长、宽,True:可变,False:不可变
myWindow.resizable(0, 0)
# 创建一个菜单项,类似于导航栏,顶层菜单
menubar=Menu(myWindow)
# 创建菜单项
fmenu1=Menu(myWindow)
for item in ['新建','打开','保存','另存为']:
# 如果该菜单是顶层菜单的一个菜单项,则它添加的是下拉菜单的菜单项。则他添加的是下拉菜单的菜单项。
fmenu1.add_command(label=item)
fmenu2=Menu(myWindow)
for item in ['复制','粘贴','剪切']:
fmenu2.add_command(label=item)
fmenu3=Menu(myWindow)
for item in ['大纲视图','web视图']:
fmenu3.add_command(label=item)
fmenu4=Menu(myWindow)
for item in ["版权信息","其它说明"]:
fmenu4.add_command(label=item)
# add_cascade 的一个很重要的属性就是 menu 属性,它指明了要把那个菜单级联到该菜单项上,
# 当然,还必不可少的就是 label 属性,用于指定该菜单项的名称
menubar.add_cascade(label="文件",menu=fmenu1)
menubar.add_cascade(label="编辑",menu=fmenu2)
menubar.add_cascade(label="视图",menu=fmenu3)
menubar.add_cascade(label="关于",menu=fmenu4)
# 最后可以用窗口的 menu 属性指定我们使用哪一个作为它的顶层菜单
myWindow.config(menu=menubar)
#标签控件布局
ttk.Label(myWindow, text="input").place(x=10, y=10)
ttk.Label(myWindow, text="output").place(x=10, y=60)
#Entry控件布局
entry1= ttk.Entry(myWindow)
entry2= ttk.Entry(myWindow)
entry1.place(x=60, y=10, width=150, height=30)
entry2.place(x=60, y=60, width=150, height=30)
# ttk使用Combobox取代了Listbox
cb = ttk.Combobox(myWindow, font=24)
# 为Combobox设置列表项
cb['values'] = ('Python', 'Swift', 'Kotlin')
cb.place(x=60, y=110, width=150, height=30)
#Quit按钮退出;Run按钮打印计算结果
ttk.Button(myWindow, text='Quit', command=myWindow.quit).place(x=10, y=160)
ttk.Button(myWindow, text='Run', command=printInfo).place(x=100, y=160)
# 先定义顶部和内容两个Frame,用来放置下面的部件
topframe = Frame(myWindow, height=80)
contentframe = Frame(myWindow)
topframe.pack(side=TOP)
contentframe.pack(side=TOP)
rightbar = Scrollbar(contentframe, orient=VERTICAL)
bottombar = Scrollbar(contentframe, orient=HORIZONTAL)
textbox = Text(contentframe, yscrollcommand=rightbar.set, xscrollcommand=bottombar.set)
# -- 放置位置
rightbar.pack(side=RIGHT, fill=Y)
bottombar.pack(side=BOTTOM, fill=X)
textbox.pack(side=LEFT, fill=BOTH)
# -- 设置命令
rightbar.config(command=textbox.yview)
bottombar.config(command=textbox.xview)
#进入消息循环
myWindow.mainloop()
https://blog.csdn.net/superfanstoprogram/article/details/83713196