tkinter学习-菜单与画布
阅读目录
Menu 菜单控件
Menubutton 菜单按钮控件
- OptionMenu 选项菜单
- Canvas 画布控件
Menu:
说明:菜单控件,显示菜单栏,下拉菜单和弹出菜单
属性:创建一个顶级菜单,需要先创建一个菜单实例,然后使用add()方法将命令和其他子菜单添加进去
创建一个下拉菜单(或者其他的子菜单),方法是一样的,最主要的区别是它们最后需要添加到主菜单上(而不是窗口上)
方法:add_cascade(label=' ',...)
add_command(label=' ',...)
from tkinter import *
root = Tk()
root.title('山丘')
root.geometry('200x200')
l = Label(root,text='',bg='yellow')
l.pack()
num=0
def show():
global num
l.config(text=num)
num+=1
menubar = Menu(root) #创建一个顶级的窗口
#创建一个下拉菜单'File',然后让它添加到顶级窗口上
filemenu = Menu(menubar,tearoff=1) #tearoff是在'File'菜单上加了一个小横杠,为0就是不加,和平时看到的一样
menubar.add_cascade(label='File',menu=filemenu)
filemenu.add_command(label='New',command=show)
filemenu.add_command(label='Open',command=show)
filemenu.add_command(label='Save',command=show)
filemenu.add_separator() #这个是分割线
filemenu.add_command(label='Rxit',command=root.quit)
editmenu = Menu(menubar,tearoff=0)#创建一个下拉菜单'Edit',然后让它添加到顶级窗口上
menubar.add_cascade(label='Edit',menu=editmenu)
editmenu.add_command(label='Cut',command=show)
editmenu.add_command(label='Copy',command=show)
editmenu.add_command(label='Paste',command=show)
root.config(menu=menubar)#显示菜单,
mainloop()
点击小横杠后的结果:
这个菜单不仅可以添加常见的命令菜单,和可以添加单选或多选按钮
from tkinter import *
root = Tk()
def show():
print('被调用了')
#创建一个顶级的菜单
menubar = Menu(root)
#创建checkbutton关联变量
openVar = IntVar()
saveVar = IntVar()
exitVar = IntVar()
#创建一个下拉菜单‘文件’,然后将它添加到顶级的菜单上
filemenu = Menu(menubar,tearoff = True)
menubar.add_cascade(label='文件',menu=filemenu)
filemenu.add_checkbutton(label='打开',command=show,variable=openVar)
filemenu.add_checkbutton(label='保存',command=show,variable=saveVar)
filemenu.add_checkbutton(label='退出',command=root.quit,variable=exitVar)
#创建radiobutton关联变量
editVar = IntVar()
editVar.set(1)
#创建一个下拉菜单‘编辑’,然后将它添加到顶级的菜单上
editmenu = Menu(menubar,tearoff = False)
menubar.add_cascade(label='编辑',menu=editmenu)
editmenu.add_radiobutton(label='剪切',command=show,variable=editVar,value=1)
editmenu.add_radiobutton(label='拷贝',command=show,variable=editVar,value=2)
editmenu.add_radiobutton(label='粘贴',command=show,variable=editVar,value=3)
root.config(menu=menubar)#显示菜单
mainloop()
结果:
Menubutton:
说明:菜单按钮控件,由于显示菜单项,它可以放在窗口的任意位置,并弹出下拉菜单
from tkinter import *
root = Tk()
def callback():
print('被调用了')
mb = Menubutton(root,text='点我',relief = RAISED)#这个是样式
mb.pack()
filemenu = Menu(mb)
filemenu.add_command(label= '打开',command=callback)
filemenu.add_command(label='保存',command=callback)
filemenu.add_separator()
filemenu.add_command(label='退出',command=callback)
mb.config(menu=filemenu)
mainloop()
结果:

OptionMenu:
说明:这是下拉菜单的改版,主要用于记录用户选择了什么
from tkinter import *
root = Tk()
variable = StringVar()
variable.set('one')
w = OptionMenu(root,variable,'one','two','there')
w.pack()
def show():
print(variable.get())
Button(root,text='点我',command=show).pack()
mainloop()
结果:
还有就是将很多选项添加到选项菜单中
from tkinter import *
root = Tk()
l = Label(root,text='',bg='yellow')
l.pack()
OPTIONS = ['A','B','C','D','E']
variable = StringVar()
variable.set(OPTIONS[0])
w = OptionMenu(root,variable,*OPTIONS)#这里注意
w.pack()
def show():
l.config(text=variable.get())
Button(root,text='点我',command=show).pack()
mainloop()
结果:

Canvas:
说明:画布控件,显示图形元素如线条或文本
属性:在Canvas上绘制对象,可以用create_xxx()的方法(xxx表示对象的类型)常用的:
acr:弧形,扇形,弦
image:PhotoImage的实例化对象
line:线
oval:圆形或椭圆形
rectangle:矩形
text:文本
window:组件
fill:填充颜色
outline:轮廓线
from tkinter import *
root = Tk()
w = Canvas(root,width=200,height=100)
w.pack()
#普通的直线,以及矩形
line1 = w.create_line(0,50,200,50,fill='green')
line2 = w.create_line(100,0,100,100,fill='red',dash=(4,4))#这个是设置成虚线
rect1 = w.create_rectangle(50,25,150,75,fill='blue')
mainloop()
结果:

如果你希望修改它们,可以用coords(),itemconfig(),move(),方法来移动画布上的对象
from tkinter import *
root = Tk()
w = Canvas(root,width=200,height=100)
w.pack()
#普通的直线,以及矩形
line1 = w.create_line(0,50,200,50,fill='green')
line2 = w.create_line(100,0,100,100,fill='red',dash=(4,4))
rect1 = w.create_rectangle(50,25,150,75,fill='blue')
#关于修改的方法
w.coords(line1,0,25,200,25)
w.itemconfig(rect1,fill='red')
w.delete(line2)
mainloop()
结果:

当然了,还可以设置圆形,参数是指定一个限定的矩形(Tkinter会自动的在这个矩形里绘制一个椭圆)
from tkinter import *
root = Tk()
w = Canvas(root,width=650,height=350)
w.pack()
w.create_rectangle(200,100,600,300,dash = (4,4))
w.create_oval(200,100,600,300,fill='pink')
w.create_text(400,200,text='越过山丘\n才发现无人等候',font=('微软雅黑',20))
w.create_oval(0,0,200,200,fill='green')
w.create_oval(75,75,125,125,fill='yellow')
w.create_text(100,100,text='山丘')
mainloop()
结果:

还支持画图,绘制超小的椭圆形的点,通过获取鼠标位置<B1 - Motion>
from tkinter import *
root = Tk()
w = Canvas(root,width=800,height=400)
w.pack()
def paint(event):
x1,y1 = (event.x - 1),(event.y - 1)
x2,y2 = (event.x + 1),(event.y + 1)
w.create_oval(x1,y1,x2,y2,fill='green')
w.bind('<B1-Motion>',paint)
Label(root,text='拖住鼠标左键进行移动,绘制你心中的蓝图').pack(side=BOTTOM)
mainloop()
结果:

有了这些,就可以随心所欲的画图了
from tkinter import *
root = Tk()
w = Canvas(root,width=400,height=400)
w.pack()
w.create_line(0,0,400,400,fill='green',width=2,dash=(4,4))#线
w.create_line(400,0,0,400,fill='red',width=2,dash=(4,4))
w.create_rectangle(0,0,100,100,fill='green') #矩形
w.create_rectangle(300,0,400,100,fill='blue')
w.create_rectangle(0,300,100,400,fill='yellow')
w.create_rectangle(300,300,400,400,fill='red')
w.create_oval(100,100,300,300,fill='black') #球
w.create_text(200,200,text='山丘',fill='white',font=('微软雅黑',20)) #文本
mainloop()
结果:

参考文献:
小甲鱼的python教学视频
tkinter学习-菜单与画布的更多相关文章
- Python Tkinter 学习成果:点歌软件music
笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...
- tkinter学习-Lable&Button
tkinter学习-La&Bu 我的第一个Tkinter程序 Label组件的使用 Button组件的使用 1.我的第一个Tkinter程序 常用的属性: title:设置窗口的标题 geom ...
- Python -- Gui编程 -- Tkinter的使用 -- 菜单与画布
1.菜单 tkMenu.py import tkinter root = tkinter.Tk() menu = tkinter.Menu(root) submenu = tkinter.Menu(m ...
- tkinter学习(3)scale尺度条和menu菜单
1.scale学习(尺度条)1.1 代码: #第1步:导出模块 import tkinter as tk #第2步:定义窗口,及其标题.大小和位置 win = tk.Tk() win.title('s ...
- python之tkinter学习目录
前言 下面的目录结构,采用的学习视频资料是网易云课堂中[莫凡]老师的,在目录的最下面的地方给出了对应的链接! 学习是逐渐积累起来的,代码也是!下面的每一篇中的对应代码,都秉承着这样的一个理念:代码是成 ...
- Python Tkinter学习笔记
介绍 入门实例 显示一个窗口,窗口里面有一个标签,显示文字 import tkinter as tk # 一个顶层窗口的实例(Top Level),也称为根窗口 app = tk.Tk() # 设置窗 ...
- Python:GUI之tkinter学习笔记1控件的介绍及使用
相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Mes ...
- tkinter学习系列之(八) Canvas控件
目录 目录 前言 (一)carves创建方法 (二)carves的画图方法 目录 前言 由于最近想在tkinter里内嵌matplotlib,由于用到tkinter里的carves控件,先学习一下. ...
- tkinter学习(4)frame、pack、canvas学习
1.frame和pack学习 1.1 代码: import tkinter as tk window = tk.Tk() window.title('my window') window.geomet ...
随机推荐
- VRTK3.3.0-001头盔相机
VRTK3.3.0下载地址:https://github.com/ExtendRealityLtd/VRTK/tree/3.3.0 SteamVR1.2.3下载地址:https://github.co ...
- Django (五) modeld进阶
day 05 models进阶 1.models基本操作 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 对于ORM框架里: 我们写的类表示数据库的表 ...
- POJ-1062-昂贵的聘礼(枚举)
链接:https://vjudge.net/problem/POJ-1062 题意: 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为 ...
- Codeforces 1137B(kmp next数组构造)
为了物尽其用,Next求出最多有哪部分能重复使用,然后重复使用就行了-- const int maxn = 5e5 + 5; char s[maxn], t[maxn]; int cnts0, cnt ...
- mysql(MySQL客户端连接工具)
在MySQL提供的工具中,DBA使用最频繁的莫过于mysql.这里的mysql不是指MySQL服务,也不是mysql数据库,而是连接数据库的客户端工具.类似于Oracle的sqlplus. 语法: m ...
- MyBatis中时间格式的映射问题
简单地说,就是Java的Date类可以直接映射到Mysql的TIMESTAMP或者是DATETIME(按道理应该是映射成DATE的) 具体的看这两篇博客吧: 1. MySql中TIMESTAMP和DA ...
- jQuery offset()源码解析
首先是原型上的offset方法,根据arguments判断到底是取值还是设值.如果是设置,就遍历调用静态方法jQuery.offset.setOffset 如果是取值.那么就是从"var d ...
- AQS及其前置知识总结
CLH队列锁 及自旋锁 乐观锁及CAS 独占锁与共享锁 LockSupport与wait ,join和notify 这里截取内部类Node的部分代码,节点的状态值如下: /** waitStatus ...
- 一个普通Java程序包含哪些线程??
package com.java.threads; import java.lang.management.ManagementFactory; import java.lang.management ...
- Java编程基础-反射
一.java反射 1.反射:动态获取类的信息,以及动态调用对象的方法的功能.可以理解为动态看透类的能力. 2.主要功能:在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意 ...