目录

  • 单元1  初识Python
    • ● 任务 1.1  计算机程序设计语言概述
    • ● 任务 1.2 Python语言
    • ● 任务1.3 Python开发环境搭建
    • ● 任务 1.4 Python的简单使用
    • ● 知识拓展
    • ● 思考与练习
  • 单元2   Python基础知识
    • ● 任务2.1 Python程序基本结构
    • ● 任务2.2  标准输入输出
    • ● 任务2.3  Python对象
    • ● 任务2.4 Python变量
    • ● 任务2.5  数据类型
    • ● 任务2.6 字符串
    • ● 任务2.7 运算符
    • ● 知识拓展
    • ● 思考与练习
  • 单元3   程序流程控制
    • ● 任务3.1  顺序结构
    • ● 任务3.2 选择结构
    • ● 任务3.3  循环结构
    • ● 知识拓展
    • ● 思考与练习
  • 单元4  Python序列
    • ● 任务4.1  序列
    • ● 任务4.2 列表
    • ● 任务4.3  用于序列操作的常用内置函数
    • ● 任务4.4   元组
    • ● 任务4.5  字典
    • ● 任务4.6  集合
    • ● 知识拓展
    • ● 思考与练习
  • 单元5  函数
    • ● 任务5.1 函数的定义与调用
    • ● 任务5.2 函数的参数
    • ● 任务5.3   参数类型
    • ● 任务5.4  变量作用域
    • ● 任务5.5   嵌套调用与递归调用
    • ● 任务5.6  lambda表达式
    • ● 任务5.7  模块
    • ● 知识拓展
    • ● 思考与练习
  • 单元6  异常处理
    • ● 任务6.1 异常处理的基本概念
    • ● 任务6.2 Python的异常处理语句
    • ● 任务6.3  自定义异常
    • ● 知识扩展
    • ● 思考与练习
  • 单元7  文件操作
    • ● 任务7.1  文件的分类
    • ● 任务7.2  文件对象
    • ● 任务7.3  文本文件
    • ● 任务7.4  二进制文件
    • ● 知识拓展
    • ● 思考与练习
  • 单元8  面向对象程序设计
    • ● 任务8.1 面向对象技术的基本概念
    • ● 任务8.2 类与对象
    • ● 任务8.3 类的继承
    • ● 任务8.4 方法重写
    • ● 知识扩展
    • ● 思考与练习
  • 单元9  网络编程基础
    • ● 任务9.1  Socket概述
    • ● 任务9.2   Socket对象内建方法
    • ● 任务9.3  Socket编程实例
    • ● 任务9.4    PythonInternet模块
    • ● 知识扩展
    • ● 思考与练习
  • 单元10    Python标准库及第三方库
    • ● 任务10.1 Python标准库
    • ● 任务10.2 Python第三方库的下载及安装
    • ● 任务10.3  Python第三方库举例
    • ● 知识扩展
    • ● 思考与练习
  • 任务11 用户图形界面(GUI)
    • ● 任务11.1 图形用户界面概述
    • ● 任务11.2 窗体容器和组件
    • ● 任务11.3 界面布局管理
    • ● 任务11.4 文本框组件
    • ● 任务11.5 其他组件
    • ● 任务11.6菜单与对话框
    • ● 任务11.7 鼠标键盘事件
    • ● 知识扩展
    • ● 思考与练习
  • 任务12   Python操作数据库
    • ● 数据库基础
    • ● 结构化查询语言SQL
    • ● Python操作数据库核心API
    • ● Python操作数据库案例
    • ● sqlite3 实训练习案例
    • ● pymysql 数据库实训案例
    • ● 小结  思考与练习
  • 习题解析(线上作业等参考解答)
    • ● 第一单元 初识Python  作业
    • ● 第二单元  Python基础(作业)
    • ● 第三单元  程序流程控制 作业(1)
    • ● 第三单元  程序流程控制  作业(2)
    • ● 第四单元  Python序列   作业
    • ● 第五单元   函数   作业
    • ● 单元六  异常处理  作业
    • ● 单元七、八  文件操作,GUI,面向对象
    • ● 单元九   网络编程基础
    • ● 线上习题解析
    • ● 编程训练
  • 应用题解(综合编程技术)
    • ● 《食品识别小专家》
    • ● 格式输出
    • ● 习题选解
    • ● 每日一帖
    • ● 模拟基本信息
    • ● 模拟基本数据
    • ● 数制转换
    • ● 定制每日运动计划
    • ● 《简易购物系统》
  • 课程章节测验
    • ● 第1次章节测验
  • 复习
    • ● Python基础知识总结
  • 第三方库TOOLS(备用)
    • ● 库模块(可下载)
    • ● 供考查备用的库模块(可下载)
任务11.6菜单与对话框

菜单与对话框

(一)菜单


创建菜单的主要步骤如下:

(1)创建菜单条对象

menubar = Menu(窗体容器) 

(2)把菜单条放置到窗体中

      窗体容器. config(menu = menubar)

(3)在菜单条中创建菜单

      菜单名称 = Menu(menubar, tearoff = 0)

    其中,tearoff取值0表示菜单不能独立使用。

(4)为菜单添加文字标签

      menubar.add_cascade(label = "文字标签", menu = 菜单名称)

(5)在菜单中添加菜单项

     菜单名称.add_command(label = "菜单项名称", command = 功能函数名)

''' 菜单控件Menu '''

例:建名为me的菜单对象

import tkinter as tk

top=tk.Tk()

top.title('python GUI')

top.geometry('300x100+125+100')  #设置窗口位置和尺寸

me=tk.Menu(top)  #创建名为me的菜单对象  #以按钮形式循环添加5个菜单项

for i in ['File','View','Edit','Tools','Help']:

     me.add_cascade (label=i)  #将top的menu属性设置为me

top['menu']=me

top.mainloop()

例:菜单控件Menu

''' 菜单控件Menu '''

import tkinter as tk

top=tk.Tk()

top.title('python GUI')

top.geometry('260x80')

lab=tk.Label(top,text='',bd=2,fg='Red',relief='sunken',

width=23,height=1,font=('隶书',14))

lab.pack(side='bottom',pady=15)

#定义4个回调函数

def doj_1():

    lab.config(text='做“文件”要做的事!')

def doj_2():

    lab.config(text='做“编辑”要做的事!')

def doj_3():

    lab.config(text='做“子菜单1”要做的事!')

def doj_4():

    lab.config(text='做“子菜单2”要做的事!')


menb=tk.Menu(top) #在顶层窗口top创建主菜单对象menb

menb.add_command(label='文件',command=doj_1)   #“文件”主菜单项没有子菜单

menb.add_command(label='编辑',command=doj_2)   #“编辑”主菜单项没有子菜单

mens=tk.Menu(menb) #创建菜单对象menb的级联子菜单对象mens

menb.add_cascade(label='存放',menu=mens)

#将子菜单mens绑定到“存放”主菜单项

mens.add_command(label='子菜单1',command=doj_3) #将子菜单1添加到mens

mens.add_command(label='子菜单2',command=doj_4) #将子菜单2添加到mens

top['menu']=menb #将整个菜单控件menb赋予顶层窗口

top.mainloop()


(二)对话框

Tkinter提供了三种标准的对话框模块: 

消息对话框messagebox 

文件对话框filedialog 

颜色选择对话框colorchooser 

1. 无返回值的消息对话框

消息对话框分为无返回值的对话框和有返回值的对话框,这二种消息对话框的导入模块语句都是一样的。

 (1)消息对话框的导入模块语句

   import tkinter

   import tkinter.messagebox #这个是消息框,对话框的关键

 (2)消息提示框

      tkinter.messagebox.showinfo('提示','人生苦短')


(3)消息警告框

      tkinter.messagebox.showwarning('警告','明日有大雨')

(4)错误消息框

        tkinter.messagebox.showerror('错误','出错了')

例:无返回值消息对话框示例。

import  tkinter

import  tkinter.messagebox

def but_info():

    tkinter.messagebox.showinfo('提示','人生苦短')

def but_warning():

    tkinter.messagebox.showwarning('警告','明日有大雨')

def but_error():

    tkinter.messagebox.showerror('错误','出错了')


root=tkinter.Tk()      #标题

root.title("消息对话框") 

root.geometry("400x400")     #窗体大小

root.resizable(False,False)     #固定窗体

tkinter.Button(root,text='消息提示框',command=but_info).pack()

tkinter.Button(root,text='消息警告框',command=but_warning).pack()

tkinter.Button(root,text='错误消息框',command=but_error).pack()

root.mainloop()


例:''' 编写一个小程序,在顶层窗口上放3个按钮,即“输入姓名”“输入分数”“退出”, 再安放一个多行文本框,以存放输入的姓名、分数及总计。

该程序用到简易对话框。 '''

import tkinter.simpledialog

import tkinter as tk

top=tk.Tk()

top.title('python GUI')

top.geometry('240x200+10+10')

txt1=tk.Text(top,bd=2,fg='Red',relief='sunken',

width=15,height=7,font=('隶书',14))

txt1.pack(side='bottom',pady=10)

def proword():  #处理输入字符串

    name=tk.simpledialog.askstring(title='请输入姓名字符串', prompt='Your name:')

    txt1.insert('end','姓名'+name+'\n')

def proint():  #处理输入整数

    score=[]  #是一个列表

    count=0

    total=0

    while True:

        number=tk.simpledialog.askinteger(title='请输入整数值',prompt='分数(5门):',maxvalue=100,minvalue=60)

        score.append(number)

        txt1.insert('end',str(score[count])+'\n')

        count+=1

        total+=number

        if count==5:

            break  

    txt1.insert('end','总计:'+str(total))


but1=tk.Button(text='输入姓名',width=8, bd=3,fg='red',

anchor='s',font=('隶书',13,'italic'),command=proword)

but1.pack(side='left')

but2=tk.Button(text='输入分数',width=8,

bd=3,fg='red', anchor='s',font=('隶书',13,'italic'),command=proint)

but2.pack(side='left',padx=5)

but3=tk.Button(text='退出',width=8,

bd=3,fg='red', anchor='s',font=('隶书',13,'italic'),command=quit)

but3.pack(side='left',padx=5)

top.mainloop()


(3)askretrycancel()

        askretrycancel()函数在对话框中显示“重试”和“取消”按钮,其返回值分别为“Ture”或“False”。


(4)askyesnocancel()

        askyesnocancel()函数在对话框中显示“是”、“否”和“取消”三个按钮,其返回值分别为“yes”、“no”或“None”。


2. 有返回值的消息对话框

(1)askokcancel()

       askokcancel()函数在对话框中显示“确定”和“取消”按钮,其返回值分别为“Ture”或“False”。如图所示。


(2)askquestion()

askquestion()函数在对话框中显示“是”和“否”按钮,其返回值分别为“yes”或“no”。

#【例12】有返回值的消息对话框示例。

import tkinter

import tkinter.messagebox

def but_okcancel():

    a = tkinter.messagebox.askokcancel('提示', '要执行此操作吗')

    print(a)

def but_askquestion():

    a = tkinter.messagebox.askquestion('提示', '要执行此操作吗')

    print(a)

def but_trycancel():

    a = tkinter.messagebox.askretrycancel('提示', '要执行此操作吗')

    print(a)

def but_yesnocancel():

   a = tkinter.messagebox.askyesnocancel('提示', '要执行此操作吗')

   print(a)

root=tkinter.Tk()

root.title('消息对话框')        # 标题

root.geometry('400x400')        # 窗体大小

root.resizable(False, False)    # 固定窗体

tkinter.Button(root, text='确定/取消对话框',command=but_okcancel).pack()

tkinter.Button(root, text='是/否对话框',command=but_askquestion).pack()

tkinter.Button(root, text='重试/取消对话',command=but_trycancel).pack()

tkinter.Button(root, text='是/否/取消对话框',command=but_yesnocancel).pack()

root.mainloop()

3. 文件对话框filedialog

(1)导入文件对话框模块语句

          import tkinter.filedialog

 (2)获取文件对话框返回值

        文件对话框的返回值为文件路径和文件名。

【例13】文件对话框filedialog应用示例。

编写程序代码如下:

import tkinter.filedialog

a = tkinter.filedialog.askopenfilename()

print(a)


4. 颜色选择对话框colorchooser 

        colorchooser.askcolor()提供一个用户选择颜色的界面。其返回值是一个二元组,第1个元素是选择的RGB颜色值,第2个元素是对应的十六进制颜色值。

【例14】颜色选择对话框示例。

编写程序代码如下:

import tkinter.colorchooser

from tkinter import *

a = tkinter.colorchooser.askcolor()

print(a)


#【例14(B)】颜色选择对话框示例(检测颜色)

#编写程序代码如下:

import tkinter.colorchooser

from tkinter import *

col={"#ff0000":"红色",'#ffff00':"黄色",'#ffff00':"蓝色",'#ff00ff':"粉色",'#ff8000':"综色"}

win = tkinter.Tk ()#定义窗体标题

win.title('颜色选择对话框示例')

win.geometry('250x120') # 定义窗体的大小400x200像素

k=16

a = tkinter.colorchooser.askcolor()

print(a)

c1=a[1]

if ( c1  in  col ):

     print("颜色码: ",c1,"颜色: ",col[c1])

else:

    print("颜色码: ",c1  )

label = tkinter.Label(win,text ='欢迎进入 Python 世界!',font='song-'+str(k),fg=c1)  # fg='#00ffff'

label.pack()