pythongui界面小程序_python界面小程序

Python支持多種圖形界面的第三方庫,包括:

Tk

wxWidgets

Qt

GTK

等等。

但是Python自帶的庫是支持Tk的Tkinter,使用Tkinter,無需安裝任何包,就可以直接使用。本章簡單介紹如何使用Tkinter進行GUI編程。

Tkinter

我們來梳理一下概念:

我們編寫的Python代碼會調用內置的Tkinter,Tkinter封裝了訪問Tk的接口;

Tk是一個圖形庫,支持多個操作系統,使用Tcl語言開發;

Tk會調用操作系統提供的本地GUI接口,完成最終的GUI。

所以,我們的代碼只需要調用Tkinter提供的接口就可以了。

第一個GUI程序

使用Tkinter十分簡單,我們來編寫一個GUI版本的“Hello, world!”。

第一步是導入Tkinter包的所有內容:

from Tkinter import *

第二步是從Frame派生一個Application類,這是所有Widget的父容器:

class Application(Frame):

def __init__(self, master=None):

Frame.__init__(self, master)

self.pack()

self.createWidgets()

def createWidgets(self):

self.helloLabel = Label(self, text='Hello, world!')

self.helloLabel.pack()

self.quitButton = Button(self, text='Quit', command=self.quit)

self.quitButton.pack()

在GUI中,每個Button、Label、輸入框等,都是一個Widget。Frame則是可以容納其他Widget的Widget,所有的Widget組合起來就是一棵樹。

pack()方法把Widget加入到父容器中,並實現布局。pack()是最簡單的布局,grid()可以實現更復雜的布局。

在createWidgets()方法中,我們創建一個Label和一個Button,當Button被點擊時,觸發self.quit()使程序退出。

第三步,實例化Application,並啟動消息循環:

app = Application()

# 設置窗口標題:

app.master.title('Hello World')

# 主消息循環:

app.mainloop()

GUI程序的主線程負責監聽來自操作系統的消息,並依次處理每一條消息。因此,如果消息處理非常耗時,就需要在新線程中處理。

運行這個GUI程序,可以看到下面的窗口:

c7689c98afc7ad62426c62fff39075ab.png

點擊“Quit”按鈕或者窗口的“x”結束程序。

輸入文本

我們再對這個GUI程序改進一下,加入一個文本框,讓用戶可以輸入文本,然后點按鈕后,彈出消息對話框。

from Tkinter import *

import tkMessageBox

class Application(Frame):

def __init__(self, master=None):

Frame.__init__(self, master)

self.pack()

self.createWidgets()

def createWidgets(self):

self.nameInput = Entry(self)

self.nameInput.pack()

self.alertButton = Button(self, text='Hello', command=self.hello)

self.alertButton.pack()

def hello(self):

name = self.nameInput.get() or 'world'

tkMessageBox.showinfo('Message', 'Hello, %s' % name)

當用戶點擊按鈕時,觸發hello(),通過self.nameInput.get()獲得用戶輸入的文本后,使用tkMessageBox.showinfo()可以彈出消息對話框。

程序運行結果如下:

be8be26a7f2b3eaf8f3d1a3cc16a961e.png

小結

Python內置的Tkinter可以滿足基本的GUI程序的要求,如果是非常復雜的GUI程序,建議用操作系統原生支持的語言和庫來編寫。

附上程序

{CSDN:CODE:

# -*- coding: utf-8 -*-fromTkinter import* #導入Tkinter包的所有內容importtkMessageBox

#在GUI中,每個Button、Label、輸入框等,都是一個Widget。Frame則是可以容納其他Widget的Widget,所有的Widget組合起來就是一棵樹。classApplication(Frame): #從Frame派生一個Application類,這是所有Widget的父容器:def__init__(self,master = None):

Frame.__init__(self,master)

self.pack()

self.createWidgets()

# pack()方法把Widget加入到父容器中,並實現布局。pack()是最簡單的布局,grid()可以實現更復雜的布局。defcreateWidgets(self):

self.nameInput = Entry(self)

self.nameInput.pack()

#當用戶點擊按鈕時,觸發hello(),self.alertButton = Button(self, text = 'Hello', command = self.hello)

self.alertButton.pack()

#通過self.nameInput.get()獲得用戶輸入的文本后,使用tkMessageBox.showinfo彈出對話框defhello(self):

name = self.nameInput.get() or 'world!'tkMessageBox.showinfo('Message','Hello, %s'% name)

#實例化Application,並啟動消息循環app = Application()

#設置窗口標題app.master.title('Hello World!')

#主消息循環app.mainloop()

}

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

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

相关文章

关于Linq to SQL 的“异常详细信息: System.InvalidCastException: 指定的转换无效。”

开发环境:VS2010,SQL Server2005,Windows7,使用LINQ to SQL作为ORM 运行环境:Windows2003(IIS6),.NET 3.5 SP1,SQL Server2000 症状:开发环境下一切正常,在运行环境中出现如下错误: 代码 指定的转换无效。 说明: 执行当…

哈希存储 java_Java容器系列之HashMap的存储

Java容器系列之HashMap概要本文将结合Java源码总结HashMap的存储结构及其扩容策略,并根据这些特点给出使用HashMap的最佳实践。本文不再介绍HashMap的基本使用,有需要的请先学习下Java容器的基础知识。存储结构HashMap的核心问题是如何保证读写的速度&am…

你增长的年龄,是因为丢掉了快乐吗?

这是周末,想写一篇文章给自己的一个朋友,试看能否解开他不安的情绪。我朋友是我真的朋友几年前我还是很害羞的我,有一次开技术会上,他公开的介绍了我,我觉得是一种认可,当然,也不会有一个不喜欢…

redhat5中架设DHCP服务器与DHCP中继

作者:奇异果Wickey Email:hkb178149081163.com 实验平台:VMvare 系统:RedHat5 软件包:DHCP-3.0.5 模拟需求分析:(暂无) 拓扑图: 1. 配置DHCPServer IP与GW 2. 安装DHCP…

MCU HardFault问题查找和破解方法

一、HardFault产生原因和常规分析方法二、HardFault解决方法分析三、HardFault回溯的原理四、操作分析流程:1. 心里明白徒手分析法2. CmBacktrace 天龙大法五、总结一、HardFault产生原因和常规分析方法在嵌入式开发中,偶尔会遇到Hard Fault死机的异常&…

ASP.NET Core的身份认证框架IdentityServer4--入门【转】

原文地址 Identity Server 4是IdentityServer的最新版本,它是流行的OpenID Connect和OAuth Framework for .NET,为ASP.NET Core和.NET Core进行了更新和重新设计。在本文中,我们将快速了解IdentityServer 4存在的原因,然后直接进入…

Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

栈是什么?栈有什么作用?首先,栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据栈…

内核抢占会让内核调度更好吗?

大家好,我是老吴的朋友,这篇文章转发自老吴的公众号。今天要分享的是抢占相关的基础知识。本文以内核抢占为引子,概述一下 Linux 抢占的图景。我尽量避开细节问题和源码分析。什么是内核抢占?别急,咱们慢慢来。先理解抢…

php 解压dat,电脑微信dat文件怎么打开

微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来。问题1 :如果下载失败怎么办?请先检查网络,软件并没有放在我的网站上,而是放在大厂七…

优雅地用宏实现环形缓冲区

之前写的环行缓冲区文章柔性数组和环形队列之间的故事C语言,环形队列循环缓冲区是嵌入式软件工程师在日常开发过程中的关键组件。多年来,互联网上出现了许多不同的循环缓冲区实现和示例。我非常喜欢这个模块,可以GitHub上找到这个开源的 CBUF…

XP访问Linux共享错误提示

XP访问RHEL5共享错误提示 [rootlocalhost samba]# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 21 …

一个漂亮的电子钟,纪念我们逝去的青春(含软硬件资料)

来源:阿莫论坛,作者:humancn微信公众号:芯片之家(ID:chiphome-dy)公众号不少粉丝,大一大二做的第一个项目,都是电子时钟吧,非常经典的STC89C52DS1302数码管组…

JZOJ 5776. 【NOIP2008模拟】小x游世界树

5776. 【NOIP2008模拟】小x游世界树 (File IO): input:yggdrasil.in output:yggdrasil.out Time Limits: 1500 ms Memory Limits: 262144 KB Detailed Limits Goto ProblemSetDescription 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据…

SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?...

如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了。 1、数据库中某个表中的数据很多。很多是什么概念?一万条?两万条?还是十万条、一百万条?这个,我觉得是仁者见仁、智者见智…

java图形界面颜色随机变换,JavaScript实现鼠标移入随机变换颜色

大家好!今天分享一个在 JavaScript中,实现一个鼠标移入可以随机变换颜色。/* 这里定义一下div(块元素)已下span 标签的宽.高.边框线以及边框线的颜色*/span{display: block;width: 80px;height: 80px;border: 1px solid #000000;float: left;}var adocum…

Vscode 用Filter Line看日志,很爽

因为某种原因,我抛弃了Notepad然后一直没有找到一个比较好的日志查看软件,最近发现Vscode里面的这个插件不错,给大家推荐一下。中文详情链接:https://everettjf.github.io/2018/07/03/vscode-extension-filter-line/推荐阅读&…

zblog php 七牛缩略图,zblog中Gravatar头像不显示解决方法

解决zblog博客Gravatar头像不显示方法一第一个,解决zblog博客Gravatar头像不显示解决方法是对其进行修复操作。造成不显示的原因主要是Gravatar头像地址错误。所以,我们需要对头像地址进行更改。1、进入自己的博客后台。2、找到现在使用的主题模板中的&a…

SpringCloud学习--微服务架构

目录 微服务架构快速指南 SOA Dubbo Spring Cloud Dubbo与SpringCloud对比 微服务(Microservice)架构快速指南 什么是软件架构?    软件架构是一个包含各种组织的系统组织,这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系…

工作九年的硬件工程师,想对我们说些什么?

△向上生长, TO BE TO UP. 10万工程师的成长充电站△作者:徐新文,排版:晓宇微信公众号:芯片之家(ID:chiphome-dy)时光荏苒,岁月如梭,转眼就在硬件工程师的岗位上工作了九…

StringBuffer/StringBuilder/String的区别

1、在执行速度上:Stringbuilder->Stringbuffer->String 2、String是字符串常量 Stringbuffer是字符串变量 Stringbuilder是字符串变量 有可能我们会疑惑String怎么是字符串变量。看以下代码: String str adc; str str “ef”&#x…