Python:GUI Tkinter
GUI编程
GUI编程(Graphical User Interface Programming)指的是用于创建图形用户界面的程序设计。这种界面采用图形方式显示信息,让用户可以通过图形化的方式与程序进行交互,而不是仅仅通过文本命令。GUI编程使得软件更加直观易用,提高了用户体验。
GUI编程的主要组成部分
- 图形元素:如窗口、按钮、菜单、图标等。
 - 布局管理:如何安排这些图形元素,以适应不同的屏幕大小和分辨率。
 - 事件处理:响应用户的操作,如鼠标点击、键盘输入等。
 - 用户交互:提供用户与程序交互的接口。
 
常用的GUI编程框架
- Tkinter:Python的标准GUI库,简单易用,适合快速开发。
 - wxPython:基于wxWidgets的Python封装,功能全面,支持跨平台。
 - PyQt/PySide:Qt框架的Python绑定,用于开发复杂的桌面应用程序。
 - Kivy:开源的Python库,用于开发多点触控应用程序。
 - Remi:用于开发Web界面的Python库。
 - Jython:Java平台的Python实现,可以与Java的Swing框架无缝集成。
 
Tkinter的基本使用
以下是使用Tkinter创建一个简单窗口的基本步骤:
- 导入模块 
import tkinter as tk - 创建主窗口 
root = tk.Tk() - 设置窗口属性 
root.title('My Window')root.geometry('400x300') # 宽度x高度 - 创建并添加控件 
label = tk.Label(root, text='Hello, Tkinter!')label.pack() # 使用布局管理器 - 运行消息循环 
root.mainloop() 
GUI编程的挑战
- 跨平台兼容性:确保在不同操作系统上都能良好运行。
 - 响应性能:特别是对于复杂的应用程序,需要保证界面的流畅响应。
 - 用户界面设计:良好的界面设计可以提高用户体验,但也需要投入较多的时间和资源。
 
总结
GUI编程是软件开发中不可或缺的一部分,它让软件的使用更加直观和方便。Python提供了多种GUI编程的库,开发者可以根据项目需求和自身经验选择合适的库进行开发。
Tkinter
Tkinter 是 Python 的标准 GUI(图形用户界面)库,它提供了一个快速和简单的方式来创建GUI应用程序。Tkinter 是一个封装了Tk GUI工具包的Python接口。Tk(ToolKit)是Python的前身Amoeba系统中的一部分,后来被分离出来,成为了一个独立的库。
Tkinter 是跨平台的,意味着你可以在 Windows、macOS 和 Linux 系统上使用它来创建应用程序。它支持多种图形界面元素,如按钮、文本框、标签、菜单、对话框等,并且可以通过简单的代码来布局和管理这些元素。
Tkinter 的主要组件
- 窗口(Window):是Tkinter应用程序的主容器。
 - 标签(Label):用于显示文本或图像。
 - 按钮(Button):用户可以点击的图形控件。
 - 文本框(Text):允许用户输入和显示多行文本。
 - 单行文本框(Entry):允许用户输入单行文本。
 - 复选框(Checkbutton)和单选按钮(Radiobutton):用于在多个选项中选择一个。
 - 滑动条(Scale):允许用户通过移动滑块在一个范围内选择值。
 - 列表框(Listbox):显示一个可滚动的列表。
 - 菜单(Menu):在窗口的标题栏中提供一系列的选项。
 - 对话框(Dialog):用于请求用户输入额外信息或进行确认。
 
Tkinter 的布局管理器
Tkinter 提供了几种布局管理器来自动安排和调整控件的位置和大小:
- pack():这是最简单的布局管理器,它按照代码中的顺序将控件放置在窗口中。
 - grid():将窗口分割成一个二维的表格,控件按照指定的行和列放置。
 - place():允许精确地控制控件的位置和大小,但需要手动管理控件之间的相对位置。
 
Tkinter 的基本使用
下面是一个使用 Tkinter 创建简单窗口的例子:
import tkinter as tk
# 创建主窗口
root = tk.Tk()
# 设置窗口标题
root.title('Tkinter Example')
# 创建一个标签
label = tk.Label(root, text='Hello, Tkinter!')
label.pack()
# 创建一个按钮,点击时会打印一条消息
def on_button_click():print('Button clicked!')
button = tk.Button(root, text='Click Me', command=on_button_click)
button.pack()
# 运行消息循环
root.mainloop() 
在这个例子中,我们创建了一个窗口,添加了一个标签和一个按钮。当按钮被点击时,会调用on_button_click函数,该函数打印一条消息到控制台。
Tkinter 的挑战
尽管 Tkinter 是一个强大的工具,但它也有一些局限性:
- 外观:Tkinter 的默认外观可能看起来有些过时,尽管可以通过主题或外部库如tkinterthemes来改善。
 - 复杂布局:对于复杂的布局,Tkinter 可能需要更多的代码来实现,特别是当使用pack()或grid()布局管理器时。
 - 性能:对于非常复杂的应用程序,Tkinter 可能不是性能最优的选择。
 
总结
Tkinter 是 Python 开发者创建简单 GUI 应用程序的首选工具。它的跨平台特性和简单的 API 使得它成为学习 GUI 编程的良好起点。尽管它有一些局限性,但对于许多简单的任务和教学目的来说,Tkinter 已经足够好了。
Swing
Swing 是 Java 平台的一个开源图形用户界面(GUI)工具包,用于创建富客户端应用程序。它是 Java Foundation Classes(JFC)的一部分,也被称为 Swing2。Swing 提供了一系列的控件(widgets),如按钮、文本框、表格、树形视图等,以及用于管理这些控件布局的容器。
 Swing 是用纯 Java 写成的,因此它可以在任何支持 Java 的平台上运行,实现了“一次编写,到处运行”的理念。Swing 控件的外观和行为在不同平台上保持一致,尽管它们并不是使用每个平台的原生控件。
Swing 的主要组件
- 容器(Containers):如JFrame、JPanel、JLayeredPane等,用于容纳其他控件。
 - 控件(Widgets):如 JButton、JTextField、JTable、JTree等,用于用户交互。
 - 布局管理器(Layout Managers):如 BorderLayout、FlowLayout、GridLayout等,用于自动布局控件。
 - 事件处理(Event Handling):Swing 使用事件监听器( listeners)来处理用户输入和系统事件。
 
Swing 的基本使用
下面是一个使用 Swing 创建简单窗口的例子:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
public class SwingExample {public static void main(String[] args) {// 创建主窗口JFrame frame = new JFrame("Swing Example");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 200);// 创建一个标签JLabel label = new JLabel("Hello, Swing!");frame.add(label);// 创建一个按钮JButton button = new JButton("Click Me");button.addActionListener(e -> {System.out.println("Button clicked!");});frame.add(button);// 显示窗口frame.setVisible(true);}
} 
在这个例子中,我们创建了一个JFrame窗口,添加了一个JLabel标签和一个JButton按钮。当按钮被点击时,会打印一条消息到控制台。
Swing 的挑战
尽管 Swing 是一个功能丰富的框架,但它也有一些局限性:
- 外观和感觉:Swing 的默认外观可能看起来有些过时,尽管可以通过样式(styles)或外观(look and feels)来改善。
 - 性能:对于非常复杂的应用程序,Swing 可能不是性能最优的选择,尤其是在大量使用自定义绘制时。
 - 现代 UI/UX:随着现代 UI/UX 设计的不断发展,Swing 的控件和布局可能不足以满足最新的设计需求。
 
总结
Swing 是 Java 开发者创建富客户端 GUI 应用程序的重要工具。它的跨平台特性和丰富的控件使得它成为学习 Java GUI 编程和开发复杂应用程序的理想选择。尽管它有一些局限性,但对于许多任务来说,Swing 已经足够好了,并且它仍然是许多 Java 应用程序的基础。
相关文章:
Python:GUI Tkinter
GUI编程 GUI编程(Graphical User Interface Programming)指的是用于创建图形用户界面的程序设计。这种界面采用图形方式显示信息,让用户可以通过图形化的方式与程序进行交互,而不是仅仅通过文本命令。GUI编程使得软件更加直观易用…...
制作一个可以离线安装的Visual Studio安装包
须知 前提条件,需要电脑可以正常上网且网速还行,硬盘可以空间容量足够大,怎么判断容量够用?由组件数量的多少来决定。Visual Studio 频道和发布节奏 https://learn.microsoft.com/zh-cn/visualstudio/productinfo/release-rhythm…...
机器学习——决策树(三)
【说明】文章内容来自《机器学习——基于sklearn》,用于学习记录。若有争议联系删除。 1、案例一 决策树用于是否赖床问题。 采用决策树进行分类,要经过数据采集、特征向量化、模型训练和决策树可视化4个步骤。 赖床数据链接:https://pan…...
模型量化之AWQ和GPTQ
什么是模型量化 模型量化(Model Quantization)是一种通过减少模型参数表示的位数来降低模型计算和存储开销的技术。一般来说,模型参数在深度学习模型中以浮点数(例如32位浮点数)的形式存储,而模型量化可以…...
一个简单的 HTTP 请求和响应服务——httpbin
拉取镜像 docker pull kennethreitz/httpbin:latest 查看本地是否存在存在镜像 docker images | grep kennethreitz/httpbin:latest 创建 deployment,指定镜像 apiVersion: apps/v1 kind: Deployment metadata:labels:app: httpbinname: mm-httpbinnamespace: mm-…...
2024黑龙江省职业院校技能大赛暨国赛选拔赛应用软件系统开发赛项(高职组)赛题第3套
2024黑龙江省职业院校技能大赛暨国赛选拔赛 应用软件系统开发赛项(高职组) 赛题第3套 目录: 需要竞赛源码资料可以私信博主。 竞赛说明 模块一:系统需求分析 任务1:制造执行MES—质量管理—来料检验(…...
云原生Kubernetes系列 | Kubernetes Secret及ConfigMap
云原生Kubernetes系列 | Kubernetes Secret及Configmap 1. Secret及Configmap使用背景简介2. Secret2.1. Secret创建方式2.1.1. 命令行方式2.1.2. 文件方式2.1.3. 变量方式2.1.4. YAML文件方式2.2. Secret使用方式2.2.1. 用于传递配置文件2.2.3. 用于传递变量3. ConfigMap1. Se…...
dev express 15.2图表绘制性能问题
dev express 15.2 绘制曲线 前端代码 <dxc:ChartControl Grid.Row"1"><dxc:XYDiagram2D EnableAxisXNavigation"True"><dxc:LineSeries2D x:Name"series" CrosshairLabelPattern"{}{A} : {V:F2}"/></dxc:XYDi…...
单链表的创建,插入及删除(更新ing)
1.单链表创建 ptr为头指针,指向头结点地址,即该指针变量的值为头结点地址; mov为一个辅助指针,用于将链表尾节点的指针域next指向新增节点的地址. search为一个辅助指针,用于遍历链表各节点地址,打印各节…...
C#/WPF 播放音频文件
C#播放音频文件的方式: 播放系统事件声音使用System.Media.SoundPlayer播放wav使用MCI Command String多媒体设备程序接口播放mp3,wav,avi等使用WindowsMediaPlayer的COM组件来播放(可视化)使用DirectX播放音频文件使用Speech播放(朗读器&am…...
如何使用宝塔面板+Discuz+cpolar内网穿透工具搭建可远程访问论坛服务
文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board(以下简称 Discuz!)是一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上&a…...
【HBase】——简介
1 HBase 定义 Apache HBase™ 是以 hdfs 为数据存储的,一种分布式、可扩展的 NoSQL 数据库。 2 HBase 数据模型 • HBase 的设计理念依据 Google 的 BigTable 论文,论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排序 m…...
JAVA 有关PDF文件和图片文件合并并生产一个PDF
情景: 1.文件列表包含多个图片和PDF时需要对文件进行合并 2.合并时保持文件顺序 开淦: 一、导入POM <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</ve…...
八股文打卡day10——计算机网络(10)
面试题:HTTP1.1和HTTP2.0的区别? 我的回答: 1.多路复用:HTTP1.1每次请求响应一次都得建立一次连接,HTTP1.1引入了持久连接Connection:Keep-Alive,可以建立一次连接,进行多次请求响…...
Spring Boot学习:Flyway详解
Flyway Flyway 是一款开源的数据库版本管理工具,用于管理和自动化数据库结构的变更。它可以跟踪和管理数据库的版本控制,并在应用程序启动时自动执行升级或回滚操作。 使用Flyway,你可以将数据库的变更以可重复且可控的方式应用到不同环境中…...
Spark编程实验三:Spark SQL编程
目录 一、目的与要求 二、实验内容 三、实验步骤 1、Spark SQL基本操作 2、编程实现将RDD转换为DataFrame 3、编程实现利用DataFrame读写MySQL的数据 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握Spark SQL的基本编程方法; 2、熟悉RDD到DataFram…...
文献研读|Prompt窃取与保护综述
本文介绍与「Prompt窃取与保护」相关的几篇工作。 目录 1. Prompt Stealing Attacks Against Text-to-Image Generation Models(PromptStealer)2. Hard Prompts Made Easy: Gradient-Based Discrete Optimization for Prompt Tuning and Discovery&#…...
cfa一级考生复习经验分享系列(十四)
首先说一下自己的背景,一个和金融没有半毛钱关系的数据分析师,之前考出了FRM。这次用一个半月突击12月的1级考试拿到了9A1B的成绩,纯属运气。以下纯属经(chě)验(dn),请看看就好&…...
vue本地缓存搜索记录(最多4条)
核心代码 //保存到搜索历史,最多存四个 item.name和item.code格式为:塞力斯000001var history uni.getStorageSync(history) || [];console.log("history", history)var index history.findIndex((items) > {return item.name items.nam…...
Linux创建Macvlan网络
最近在看Docker的网络,测试Macvlan部分时,发现Docker创建Macvlan与预期测试结果不一样。所以查阅了Linux下配置Macvlan,记录如下。 参考 1.Linux Macvlan 2.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 3.创建ma…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
