所用的图片:


import tkinter as tk
from tkinter import messagebox, filedialog, simpledialog, colorchooser
from tkinter import ttk
from PIL import Image, ImageTk import time
import threading def showdialog():
'''各种窗口'''
#res = messagebox.askokcancel(title='标题', message='提示信息。。。', default=messagebox.CANCEL) # default=messagebox.CANCEL,指定默认焦点位置,另 ABORT/RETRY/IGNORE/OK/CANCEL/YES/NO
#res = messagebox.showinfo(title='标题', message='提示信息。。。')
#res = messagebox.showwarning(title='标题', message='提示信息。。。')
#res = messagebox.showerror(title='标题', message='提示信息。。。')
#res = messagebox.askquestion(title='标题', message='提示信息。。。')
#res = messagebox.askyesno(title='标题', message='提示信息。。。')
#res = messagebox.askyesnocancel(title='标题', message='提示信息。。。')
#res = messagebox.askretrycancel(title='标题', message='提示信息。。。') #res = filedialog.askdirectory()
#res = filedialog.askopenfile(filetypes=[('xml', '*.xml')])
#res = filedialog.askopenfiles()
#res = filedialog.askopenfilename()
#res = filedialog.askopenfilenames()
#res = filedialog.asksaveasfile()
#res = filedialog.asksaveasfilename() #res = simpledialog.askinteger(title='整数', prompt='输入一个整数', initialvalue=100)
#res = simpledialog.askfloat(titlee='实数', prompt='输入一个实数', minvalue=0, maxvalue=11)
res = simpledialog.askstring(title='字符串', prompt='输入一个字符串') #res = colorchooser.askcolor()
print(res) class Application(tk.Tk): def __init__(self):
super().__init__()
self.geometry('677x442') # 窗口大小
#self.resizable(width=False, height=False) # 禁止改变窗口大小 self.createUI() # 生成界面
def createUI(self):
self.createICO()
self.createMenu()
self.createToolbar()
self.bindAll() # 创建菜单
def createMenu(self):
'''只支持两层嵌套'''
menus = ['文件', '编辑', '帮助']
items = [['新建', '打开', '保存', '另存为...', '关闭', '-', '退出'],
['撤销', '-', '剪切', '复制', '粘贴', '删除', '选择所有',['更多...','数据', '图表', '统计']],
['索引', '关于']]
callbacks = [[showdialog, showdialog, showdialog, showdialog, showdialog, None, showdialog],
[showdialog, None, showdialog, showdialog, showdialog, showdialog, showdialog, [showdialog, showdialog, showdialog]],
[showdialog, showdialog]]
icos = [[self.img1, self.img2, self.img3, None, self.img4, None, None],
[self.img1, None, self.img2, self.img3, None, self.img4, None, [self.img3, None, self.img4]],
[self.img1, self.img2]] menubar = tk.Menu(self)
for i,x in enumerate(menus):
m = tk.Menu(menubar, tearoff=0)
for item, callback, ico in zip(items[i], callbacks[i], icos[i]):
if isinstance(item, list):
sm = tk.Menu(menubar, tearoff=0)
for subitem, subcallback, subico in zip(item[1:], callback, ico):
if subitem == '-':
sm.add_separator()
else:
sm.add_command(label=subitem, command=subcallback, image=subico, compound='left')
m.add_cascade(label=item[0], menu=sm)
elif item == '-':
m.add_separator()
else:
m.add_command(label=item, command=callback, image=ico, compound='left')
menubar.add_cascade(label=x, menu=m)
self.config(menu=menubar) # 生成所有需要的图标
def createICO(self):
self.img1 = ImageTk.PhotoImage(Image.open('ico_new_16_16.jpg'))
self.img2 = ImageTk.PhotoImage(Image.open('ico_open_16_16.jpg'))
self.img3 = ImageTk.PhotoImage(Image.open('ico_save_16_16.jpg'))
self.img4 = ImageTk.PhotoImage(Image.open('ico_close_16_16.jpg'))
#self.img5 = ImageTk.PhotoImage(Image.open('ico_new.jpg'))
#self.img6 = ImageTk.PhotoImage(Image.open('ico_open.jpg')) # 生成工具条
def createToolbar(self):
toolframe = tk.Frame(self, height=20, bg='#F7EED6')#, relief=tk.RAISED)
frame = tk.Frame(toolframe, bg='#F7EED6')
ttk.Button(frame, width=20, image=self.img1, command=showdialog).grid(row=0, column=0, padx=1, pady=1, sticky=tk.E)
ttk.Button(frame, width=20, image=self.img2, command=showdialog).grid(row=0, column=1, padx=1, pady=1, sticky=tk.E)
ttk.Button(frame, width=20, image=self.img3, command=showdialog).grid(row=0, column=2, padx=1, pady=1, sticky=tk.E)
frame.pack(side=tk.LEFT)
toolframe.pack(fill=tk.X) #def createLayout(self):
leftframe = tk.Frame(self, width=120, bg='#0000FF')
ttk.Treeview()
leftframe.pack(side=tk.LEFT, fill=tk.Y)
mainframe = tk.Frame(self, bg='#00FFFF')
tk.Text(mainframe).pack(side=tk.LEFT, fill=tk.X)
ttk.Scrollbar(mainframe).pack(side=tk.LEFT,fill=tk.Y)
mainframe.pack(side=tk.LEFT, fill=tk.BOTH) # 绑定快捷键
def bindAll(self):
self.bind_all('<Control-n>', lambda event:showdialog()) # 此处必须 lambda # 打包入线程(耗时的操作)
@staticmethod
def thread_it(func, *args):
t = threading.Thread(target=func, args=args)
t.setDaemon(True)
t.start() app = Application()
app.mainloop()

tkinter菜单图标,工具栏的更多相关文章

  1. 菜单工具栏wxPython菜单与工具栏基础示例

    这两天一直在学习菜单工具栏之类的问题,上午正好有机会和大家讨论一下. 1.基本的api介绍 Package wx :: Class Menu Type Menu Method Summary Menu ...

  2. 【2017-04-25】winform公共控件、菜单和工具栏、Tab和无边框窗体制作

    一.公共控件 1. Button   按钮 + 布局 - AutoSize   按钮尺寸自动适应里面内容的长度 - Location    位置 - Margin       控件与控件外边距 - S ...

  3. pyqt5 -——菜单和工具栏

    一. 状态栏 # -*- coding: utf-8 -*-# @Time : 2018/12/22 12:37# @Author : Bo# @Email : mat_wu@163.com# @Fi ...

  4. 【2017-04-25】winform公共控件、菜单和工具栏

    一.公共控件 公共控件很多的属性很多都相似,这些是大部分都相同的: +布局 - AutoSize:自动适应控件上文字内容- Location:位置- Margin:控件间的间距- Size:控件大小 ...

  5. PyQt5教程——菜单和工具栏(3)

    PyQt5中的菜单和工具栏 在这部分的PyQt5教程中,我们将创建菜单和工具栏.菜单式位于菜单栏的一组命令操作.工具栏是应用窗体中由按钮和一些常规命令操作组成的组件. 主窗口 QMainWindow类 ...

  6. GEF入门实例_总结_03_显示菜单和工具栏

    一.前言 本文承接上一节: GEF入门实例_总结_02_新建初始RCP空项目 这一节,我们来给我们的插件加上菜单. 二.基础知识 1.action bar.menubar.coolbar   含义 a ...

  7. 在PyQt中构建 Python 菜单栏、菜单和工具栏

    摘要:菜单.工具栏和状态栏是大多数GUI 应用程序的常见且重要的图形组件.您可以使用它们为您的用户提供一种快速访问应用程序选项和功能的方法. 本文分享自华为云社区<Python 和 PyQt:创 ...

  8. WinForm 菜单和工具栏

    菜单和工具栏: 1.MenuStrip:顶部菜单 优先级最高,默认在最顶部 (1)分割线:a.打一个减号 “-”                   b.右键插入Separator (2)点击事件:每 ...

  9. WinForm菜单和工具栏

    菜单和工具栏: 1.MenuStrip - 顶部菜单栏分割线:1输入- 2.右键插入 |SpearTOR 快捷键设置:每一个项右键属性的最下面可以设置快捷键不管选项隐藏还是菜单隐藏,快捷键都管用 2. ...

随机推荐

  1. BZOJ1334:[Baltic2008]Elect(背包DP)

    Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党 ...

  2. Linux学习总结(十八)几个简单的文本处理工具cut sort tr split

    1 命令cut 用来截取某一个字段格式 : cut -d '分隔符' [-cf] n, n为数字,表示第几段-d:后面跟分隔符,分割符要加单引号-c:后面接的是第几个字符-f:后面接的是第几段那么意思 ...

  3. 【vue.js】入门

    慕课网视频学习笔记:http://www.imooc.com/learn/694 1.将html.js.css写到一个后缀名.vue的文件中,区分这三种类型是通过<template>.&l ...

  4. EasyConnect 使用方法

    一.此处以安卓系统为例进行介绍. 1.通过谷歌市场下载 EasyConnect,安装完成后,打开EasyConnect,界面如下图 1 所示 <ignore_js_op> 2.输入 SSL ...

  5. 新闻cms管理系统功能介绍

    一. 后台登录功能 1.后台登录 2.数据校验 3. dialog插件 4.layer插件 5. 退出登录(利用session失效) 二. 菜单管理 1.后台入口文件优化 2.公共文件引入 3.菜单的 ...

  6. 在Windos上安装Nginx

    官网地址:http://nginx.org/en/download.html 1.下载 2.解压 3.启动 4.访问 打开cmd cd到nginx路径,使用命令关闭它 nginx.exe -s sto ...

  7. 可视化编程中----cell的自适应高度

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ Joke ...

  8. java中的序列化问题

    序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,以便存储在文件中或在网络上传输.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.序列化是 ...

  9. 为什么我们要做三份 Webpack 配置文件

    时至今日,Webpack 已经成为前端工程必备的基础工具之一,不仅被广泛用于前端工程发布前的打包,还在开发中担当本地前端资源服务器(assets server).模块热更新(hot module re ...

  10. c++学习笔记(新手学习笔记,如有错误请与作者联系)

    逗号”,“运算符:a = 公式1,公式2:把公式1的结果放进公式2中进行运算,如: a = 3*5 , a*4; 计算结果:a = 3*5*4=60; typedef:类型别名,为已有类型另外命名 t ...