学python的第二十三天

news2024/12/29 2:10:44

原文链接:Python 图形化界面设计(Tkinter) - 简书 (jianshu.com)

子窗体(Toplevel)

直接上代码:

# 子窗体
from tkinter import *


def newwindow():
    winNew = Toplevel(root)
    winNew.geometry('320x240')
    winNew.title('子窗口')
    zlab = Label(winNew, text='这是一个子窗口')
    zlab.place(relx=0.2, rely=0.2)
    close = Button(winNew, text='关闭', command=winNew.destroy)
    close.place(relx=0.7, rely=0.5)


root = Tk()
root.title('主窗口')
root.geometry('320x240')

lab = Label(root, text='这是一个主窗口', font=('黑体', 20, 'bold'))
lab.place(relx=0.2, rely=0.2)

mainmenu = Menu(root)
menuFile = Menu(mainmenu, tearoff=0)
mainmenu.add_cascade(label='菜单', menu=menuFile)
menuFile.add_command(label='新窗体', command=newwindow)
menuFile.add_separator()
menuFile.add_command(label='退出', command=root.destroy)

root.config(menu=mainmenu)
root.mainloop()

输出结果:

 

模式对话框,

1,消息对话框

代码示例:

# 消息对话框
from tkinter import *
import tkinter.messagebox


def xx():
    answer = tkinter.messagebox.askokcancel('请选择', '请选择确定或取消')
    if answer:
        lab.config(text='已确认', fg='green')
    else:
        lab.config(text='已取消', fg='red')


root = Tk()
root.title('消息对话框')
root.geometry('300x100')
lab = Label(root, text='')
lab.pack()
btn = Button(root, text='弹出对话框', fg='blue', command=xx)
btn.pack()
root.mainloop()

输出结果:

2,输入对话框

代码示例:

# 输入对话框
from tkinter.simpledialog import *
from tkinter import *


def sr():
    q = askstring('请输入', '请输入一段文字')
    lab.config(text=q)


root = Tk()
root.title('输入对话框')
root.geometry('320x240')
lab = Label(root, text='')
lab.pack()
btn = Button(root, text='输入', fg='blue', command=sr)
btn.place(relx=0.5, rely=0.5, anchor=CENTER)
root.mainloop()

输出结果:

 ,

3,文件选择对话框

代码示例:

# 文件选择对话框
from tkinter import *
import tkinter.filedialog


def wjxz():
    filename = tkinter.filedialog.askopenfilename()  # 返回文件路径
    print(filename)

    if filename != '':
        # 打开文件并读取内容
        try:
            with open(filename, 'r', encoding='utf-8') as file:
                content = file.read()
                lab.config(text='你选的文件是:' + filename + '\n文件内容:\n' + content)
        except Exception as e:
            lab.config(text='打开文件时出错:' + str(e))
    else:
        lab.config(text='未选择文件')


root = Tk()
root.title('文件选择对话框')
root.geometry('700x800')  # 增加了窗口的高度以容纳更多文本

lab = Label(root, text='')
lab.pack(pady=20)  # 增加垂直内边距,使标签与按钮之间的空间更大

btn = Button(root, text='选择文件', fg='blue', command=wjxz)
btn.place(relx=0.01, rely=0.01)

root.mainloop()

输出结果:

 

4,颜色选择对话框

代码示例:

# 颜色选择对话框
from tkinter import *
import tkinter.colorchooser


def ys():
    color = tkinter.colorchooser.askcolor()
    colorstr = str(color)
    print('打印字符串%s 切掉后=%s' % (colorstr, colorstr[-9:-2]))
    lab.config(text=colorstr[-9:-2], bg=colorstr[-9:-2])


root = Tk()
root.title('颜色选择对话框')
root.geometry('300x200')
lab = Label(root, text='请关注颜色的变化', bg='white')
lab.pack()
btn = Button(root, text='选择颜色', fg='blue', command=ys)
btn.place(relx=0.01, rely=0.01)
root.mainloop()

输出结果:

 

事件响应

示例,按键响应

代码示例:

# 按键响应
from tkinter import *


def show(event):
    s = event.keysym
    lab.config(text=s)


root = Tk()
root.title('按键响应')
root.geometry('300x200')
lab = Label(root, text='请点击键盘', font=('楷体', 30))
lab.bind('<Key>', show)
lab.focus_set()  # 使标签获取焦点
lab.pack()
root.mainloop()

输出结果:

 

事件响应一些基本绑定

1. 点击事件 (<Button-1>)

通常用于绑定鼠标左键点击事件。

代码例子:

button = Button(root, text="Click Me!")
button.bind("<Button-1>", on_click) # 绑定鼠标左键点击事件
def on_click(event):
print("Button clicked!")

2. 键盘事件 (<Key><Any-KeyPress><KeyRelease>, 等)

用于监听键盘上的按键事件。

代码例子:

entry = Entry(root)
entry.bind("<Key>", on_key_press) # 监听任意键的按下
def on_key_press(event):
print("Key pressed:", event.char)

3. 鼠标移动事件 (<Enter><Leave><Motion>, 等)

用于监听鼠标在部件上的移动或进出事件。

代码例子:
label = Label(root, text="Hover over me")
label.bind("<Enter>", on_enter)
label.bind("<Leave>", on_leave)
def on_enter(event):
print("Mouse entered the label")
def on_leave(event):
print("Mouse left the label")

4. 双击事件 (<Double-Button-1>)

用于绑定鼠标左键的双击事件。

代码例子:
label = Label(root, text="Double-click me")
label.bind("<Double-Button-1>", on_double_click)
def on_double_click(event):
print("Label double-clicked!")

5. 滚动事件 (<MouseWheel>)

用于监听鼠标滚轮事件。

代码例子:
scrollbar = Scrollbar(root)
scrollbar.bind("<MouseWheel>", on_scroll)
def on_scroll(event):
print("Mouse wheel scrolled:", event.delta)

6. 焦点变化事件 (<FocusIn><FocusOut>)

用于监听部件获取或失去焦点的事件。

代码例子:
entry = Entry(root)
entry.bind("<FocusIn>", on_focus_in)
entry.bind("<FocusOut>", on_focus_out)
def on_focus_in(event):
print("Entry got focus")
def on_focus_out(event):
print("Entry lost focus")

7. 窗口大小改变事件 (<Configure>)

用于监听窗口大小变化的事件。

代码例子:
root.bind("<Configure>", on_resize)
def on_resize(event):
print("Window resized to:", event.width, "x", event.height)

8. 鼠标拖动事件 (<B1-Motion><ButtonPress-1><ButtonRelease-1>, 等)

这些事件允许你监听和处理鼠标拖动操作。

代码例子:
canvas = Canvas(root, width=200, height=200)
canvas.bind("<B1-Motion>", on_drag)
canvas.pack()
def on_drag(event):
print("Dragging at:", event.x, event.y)

9. 部件销毁事件 (<Destroy>)

当部件被销毁时触发。

代码例子:
frame = Frame(root)
frame.bind("<Destroy>", on_destroy)
frame.pack()
def on_destroy(event):
print("Frame destroyed")

10. 部件映射事件 (<Map><Unmap>)

当部件被映射到屏幕上(变得可见)或被从屏幕上移除(变得不可见)时触发。

代码例子:
label = Label(root, text="Hello")
label.bind("<Map>", on_map)
label.bind("<Unmap>", on_unmap)
label.pack()
def on_map(event):
print("Label mapped")
def on_unmap(event):
print("Label unmapped")

11. 菜单项选择事件 (<<Command>>)

当用户选择菜单项时触发。

代码例子:
menu = Menu(root)
menu.add_command(label="Quit", command=quit_program)
menu.bind("<<Command>>", on_menu_command)
def quit_program():
root.quit()
def on_menu_command(event):
print("Menu command selected:", event.widget.cget("label"))

12. 定时器事件 (root.after())

虽然这不是一个绑定到部件的事件,但Tkinter的after()方法允许你设置一个定时器,在指定的时间后调用一个函数。这可以用于实现周期性的事件或延迟执行某些操作。代码例子:

def update_clock():
current_time = time.strftime("%H:%M:%S")
clock_label.config(text=current_time)
root.after(1000, update_clock) # 每秒更新一次时钟
clock_label = Label(root, font=('helvetica', 36, 'bold'), bg='green')
clock_label.pack(fill=BOTH, expand=YES)
update_clock() # 开始更新时钟

在使用这些事件时,你通常需要定义一个回调函数(如上面的 on_click),它接收一个事件对象作为参数。这个事件对象包含了关于触发事件的详细信息,如按键的字符、鼠标的位置、滚动的距离等。通过访问这些属性,你可以在回调函数中执行相应的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言-atoi和atof函数的使用

人生应该树立目标&#xff0c;否则你的精力会白白浪费。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;知识回顾 &#x1f34b;知识点一&#xff1a;atoi函数的使用和实现 • &#x1f330;1.函数介绍 • &#x1f330;2.代码演示 • &#x1f330;3.atoi函数的…

《十一》Qt各种对话框之QInputDialog

QInputDialog QInputDialog 用于方便快捷地获取一个用户输入数据&#xff0c;支持整数 int、浮点数 double、文本 QString 三种数据。按照 QInputDialog 内部的输入控件&#xff0c;又可以分为整数输入控件 QSpinBox、浮点数输入控件 QDoubleSpinBox、单行文本输入控件 QLineE…

AI大模型日报#0428:AI聊天半年涨粉1000万、元象发布多模态XVERSE-V、字节发布视觉ViTamin

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。AI大模型日报今日要点&#xff1a; 今日&#xff0c;AI大模型领域动作频频&#xff0c;多家科技巨头和初创公司展示了其最新研发成果。快手…

暗区突围如何申请测试资格?暗区突围测试申请的方法轻松掌握

游戏中健康系统与其它射击游戏有很大区别&#xff0c;根据受伤部位、伤势的不同&#xff0c;会有不同的表现。除了头部之外&#xff0c;其它部位如果损坏后继续受到伤害&#xff0c;那么伤害将会分摊到身体其它部位。在暗区内或者暗区外都可以对角色进行治疗&#xff0c;角色不…

FebHost:深入分析企业海外市场选通用域名还是国别域名?

企业想进入海外在线市场&#xff0c;非常重要的一个环节是如何选择一个在线品牌域名&#xff0c;很多企业面临着选择.COM还是国别域名。以下是一些需要考虑的因素。 域名可用性 一个网站的域名可以给人留下深刻的品牌印象。新企业更倾向于选择 .com、.net 和 .org 等标准通用顶…

【哔哩哔哩笔试题汇总】2024-04-28-哔哩哔哩春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新b站近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497…

由于找不到msvcr120.dll,无法继续执行代码

在日常编程中&#xff0c;缺少关键的msvcr120.dll文件可能会导致代码无法执行&#xff0c;给我们带来不便。针对缺少msvcr120.dll文件的情况&#xff0c;我们可以采取一些有效的解决方法来解决这一问题。通过下载安装或使用Visual C Redistributable工具安装该msvcr120.dll文件…

MySQL/MariaDB 如何查看当前的用户

MySQL 的所有数据库用户信息是存储在 user 数据表中的。 可以在登录成功数据后运行 SQL&#xff1a; MariaDB [(none)]> select user,host from user;就可以查看到数据中的所有用户信息。 MariaDB [(none)]> select user,host from user; ERROR 1046 (3D000): No databa…

K8S哲学 - statefulSet 灰度发布

kubectl get - 获取资源及配置文件 kubectl get resource 【resourceName -oyaml】 kubectl create - 指定镜像创建或者 指定文件创建 kubectl create resource 【resourceName】 --imagemyImage 【-f my.yaml】 kubectl delete kubectl describe resource resourc…

医院敏感文件交互 如何保障安全和效率?

医院会产生大量的敏感文件&#xff0c;这些敏感文件交互时&#xff0c;都需要使用特殊的手段&#xff0c;来保障数据的安全性。 医院的敏感数据主要包括以下几类&#xff1a; 1、患者基本信息&#xff1a;包括患者的姓名、身份证号码、户籍地或现住址、联系方式、文化程度、既…

LeetCode - LCR 179.查找总价格为目标值的两个商品

一. 题目链接 LeetCode - LCR 179. 查找总价格为目标值的两个商品 解法&#xff08;双指针 - 对撞指针&#xff09;&#xff1a; 算法思路&#xff1a; 注意到本题是升序的数组&#xff0c;因此可以用「对撞指针」优化时间复杂度。 算法流程&#xff1a; 初始化left &#…

el-form 表单设置某个参数非必填验证

html <el-form ref"form" :rules"rules"><el-form-item prop"tiktokEmail" label"邮箱" ><el-input v-model"form.tiktokEmail" placeholder"邮箱" ></el-input></el-form-item&…

一篇了解reactor框架特性

一篇了解reactor框架特性 本文档的一些典型的名词如下&#xff1a; Publisher&#xff08;发布者&#xff09;、Subscriber&#xff08;订阅者&#xff09;、Subscription&#xff08;订阅 n.&#xff09;、subscribe&#xff08;订阅 v.&#xff09;。event/signal&#xff0…

一文搞懂 One-Hot Encoding(独热编码)

文章目录 前言 1、独热编码的原理 2、独热编码的分类 3、独热编码的应用 前言 本文将从独热编码的原理、独热编码的分类、独热编码的应用三个方面&#xff0c;来展开介绍独热编码 One-Hot Encoding。 1、独热编码的原理 特征数字化&#xff1a;将分类变量&#xff08;或称为离…

手机测试之-adb

一、Android Debug Bridge 1.1 Android系统主要的目录 1.2 ADB工具介绍 ADB的全称为Android Debug Bridge,就是起到调试桥的作用,是Android SDK里面一个多用途调试工具,通过它可以和Android设备或模拟器通信,借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多…

艾体宝案例 | 使用Redis和Spring Ai构建rag应用程序

随着AI技术的不断进步&#xff0c;开发者面临着如何有效利用现有工具和技术来加速开发过程的挑战。Redis与Spring AI的结合为Java开发者提供了一个强大的平台&#xff0c;以便快速构建并部署响应式AI应用。探索这一整合如何通过简化的开发流程&#xff0c;让开发者能够更专注于…

python——井字棋游戏——登入注册界面

本篇文章只讲解登入和注册页面&#xff0c;在后面的文章中会讲解井字棋游戏&#xff0c;然后把井字棋和登入界面进行连接&#xff0c;整合成一个完整的游戏。 登入注册界面在本篇文章的末尾。 1.实现登入界面 &#xff08;1&#xff09;导入图片 把这张图片存储在与代码路径…

小程序的合同是怎么样写的

​很多商家找第三方做小程序都遭遇到了各种问题&#xff0c;如访问速度慢、服务器关闭、反复收费等。如果当初商家找的是正规的第三方服务商&#xff0c;双方签订了明确的合同条款&#xff0c;出现任何问题后&#xff0c;相信都能够进行解决。下面将具体介绍合同内容&#xff0…

面试高频:什么情况下要用到缓存?如何应对缓存穿透、击穿及雪崩?

一、为什么要使用内存数据库&#xff1f; 我们先来看一下以往单体的Web系统架构图是什么样的&#xff1a; 从图中可以看出&#xff0c;早期的单体架构基本上是以业务为导向&#xff0c;同时用户群体不是很大&#xff0c;这种单体的架构基本上可以应付大多数使用场景。但随着互…

Springboot+Vue项目-基于Java+MySQL的商业辅助决策系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…