Python GUI库Tkiner使用方法代码示例


Posted in Python onNovember 27, 2020

前言

Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

语法部件

Tkinter提供了各种控件,例如GUI应用程序中使用的按钮,标签和文本框。这些控件通常称为小部件。
Tkinter当前有15种类型的小部件。下表中列出了这些小部件以及简要说明-

部件

部件 描述
Button 按钮控件;在程序中显示按钮。
Canvas 画布控件;显示图形元素如线条或文本
Checkbutton 多选框控件;用于在程序中提供多项选择框
Entry 输入控件;用于显示简单的文本内容
Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label 标签控件;可以显示文本和位图
Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton 菜单按钮控件,用于显示菜单项。
Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message 消息控件;用来显示多行文本,与label比较类似
Radiobutton 单选按钮控件;显示一个单选的按钮状态
Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text 文本控件;用于显示多行文本
Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox 输入控件;与Entry类似,但是可以指定输入范围值
PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox 用于显示你应用程序的消息框。

标准属性

让我们看一下如何指定它们的一些常见属性,例如大小,颜色和字体。

属性

属性 描述
属性 描述
Dimension 控件大小;
Color 控件颜色;
Font 控件字体;
Anchor 锚点;
Relief 控件样式;
Bitmap 位图;
Cursor 光标;

几何管理

所有的Tkinter小部件都可以访问特定的几何管理方法,该方法的目的是在整个父小部件区域中组织小部件。Tkinter公开以下几何图形管理器类:包装,网格和位置。

几何方法

几何方法 描述
pack() 包装;
grid() 网格;
place() 位置;

示例1

#!/usr/bin/python
# -*- coding: utf-8 -*-
# author:Huny

import tkinter as tk
import tkinter.messagebox
#实例对象
window = tk.Tk()
#标题
window.title('Huny之家')
window.geometry('500x300')
#加载图片
canvas = tk.Canvas(window,width=400,height=135,bg='green')#创建画布
image_file = tk.PhotoImage(file='pic.gif')#添加图片的路径
image = canvas.create_image(200,0,anchor='n',image=image_file)#创建图片并声明大小和位置以及图片的路径
canvas.pack(side='top')
tk.Label(window,text='Wellcome',font=('Arial',16)).pack()#声明一个小部件并放在父部件window中
#名称
tk.Label(window,text='用户名').place(x=50,y=165)
tk.Label(window,text='密码').place(x=50,y=200)
#文本和密码输入框、登录按钮
var_usr_name = tk.StringVar()#记录输入值的变量
var_usr_name.set('huny')#设置默认用户名
e1 =tk.Entry(window, textvariable=var_usr_name,font=('Arial',14))#定义一个文本框和字体,接受文本框中的值
var_usr_pwd = tk.StringVar()
e2 =tk.Entry(window, textvariable=var_usr_pwd,font=('Arial',14))
e1.pack()#将小部件组织成块,然后再将其放置在主小部件中
e2.pack()
#登录弹窗提示功能
def login():
  usr_name = var_usr_name.get()
  usr_pwd = var_usr_pwd.get()
  user_info = {'huny':'123456'}
  if usr_name in user_info:
    if usr_pwd == '123456':
      tkinter.messagebox.showinfo(title='欢迎来到Huny之家',message='登录成功!')#正确的弹窗提示
    else:
      tkinter.messagebox.showerror(title='提醒',message='密码错误!')#错误的弹窗提示
  else:
    tkinter.messagebox.showerror(title='提醒',message='用户名错误')#错误的弹窗提示
e3 = tk.Button(window,text="登录",width=10,height=2,command=login)#声明一个按钮部件
e3.pack()
window.mainloop()#循环执行可以理解为保持窗口运行,否则界面不展示

简单的登录界面判断

Python GUI库Tkiner使用方法代码示例
Python GUI库Tkiner使用方法代码示例

示例2

#!/usr/bin/ python
# -*- coding: utf-8 -*-
import urllib.request
import urllib.parse
import json
from tkinter import *
import hashlib
import time

LOG_LINE_NUM = 0

class MY_GUI():
  def __init__(self,init_window_name):
    self.init_window_name = init_window_name


  #设置窗口
  def set_init_window(self):
    self.init_window_name.title("翻译工具")      #窗口名
    # self.init_window_name.geometry('320x160+10+10')             #290 160为窗口大小,+10 +10 定义窗口弹出时的默认展示位置
    self.init_window_name.geometry('1080x581+10+10')
    self.init_window_name["bg"] = "green"                  #窗口背景色,其他背景色见:blog.csdn.net/chl0000/article/details/7657887
    # self.init_window_name.attributes("-alpha",0.9)             #虚化,值越小虚化程度越高
    #标签
    self.init_data_label = Label(self.init_window_name, text="待处理数据")
    self.init_data_label.grid(row=0, column=4)
    self.result_data_label = Label(self.init_window_name, text="输出结果")
    self.result_data_label.grid(row=0, column=16)
    self.log_label = Label(self.init_window_name, text="日志")
    self.log_label.grid(row=12, column=4)
    #文本框
    self.init_data_Text = Text(self.init_window_name, width=67, height=25) #原始数据录入框
    self.init_data_Text.grid(row=1, column=0, rowspan=10, columnspan=10)
    self.result_data_Text = Text(self.init_window_name, width=70, height=39) #处理结果展示
    self.result_data_Text.grid(row=1, column=12, rowspan=15, columnspan=10)
    self.log_data_Text = Text(self.init_window_name, width=66, height=12) # 日志框
    self.log_data_Text.grid(row=13, column=0, columnspan=10)
    #按钮
    self.str_trans_to_md5_button = Button(self.init_window_name, text="一键翻译", bg="lightblue", width=8,command=self.translate) # 调用内部方法 加()为直接调用
    self.str_trans_to_md5_button.grid(row=5, column=11)


  #功能函数
  def translate(self):    
    centens = self.init_data_Text.get(1.0,END).strip().replace("\n","")
    if centens:
      try:
        url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
        data = {}
        data['i'] = centens
        data['from'] = 'AUTO'
        data['to'] = 'AUTO'
        data['smartresult'] = 'dict'
        data['client'] = 'fanyideskweb'
        data['salt'] = '16057996372935'
        data['sign'] = '0965172abb459f8c7a791df4184bf51c'
        data['lts'] = '1605799637293'
        data['bv'] = 'f7d97c24a497388db1420108e6c3537b'
        data['doctype'] = 'json'
        data['version'] = '2.1'
        data['keyfrom'] = 'fanyi.web'
        data['action'] = 'FY_BY_REALTlME'
        data = urllib.parse.urlencode(data).encode('utf-8')
        response = urllib.request.urlopen(url,data)
        html = response.read().decode('utf-8')
        req = json.loads(html)
        result = req['translateResult'][0][0]['tgt']
        self.result_data_Text.delete(1.0,END)
        self.result_data_Text.insert(1.0,result)
        self.write_log_to_Text("INFO:str_trans_ success")
      except:
        self.result_data_Text.delete(1.0,END)
        self.result_data_Text.insert(1.0,"操作错误")
    else:
      self.write_log_to_Text("ERROR:str_trans_ failed")
          
  #获取当前时间
  def get_current_time(self):
    current_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    return current_time

  #日志动态打印
  def write_log_to_Text(self,logmsg):
    global LOG_LINE_NUM
    current_time = self.get_current_time()
    logmsg_in = str(current_time) +" " + str(logmsg) + "\n"   #换行
    if LOG_LINE_NUM <= 7:
      self.log_data_Text.insert(END, logmsg_in)
      LOG_LINE_NUM = LOG_LINE_NUM + 1
    else:
      self.log_data_Text.delete(1.0,2.0)
      self.log_data_Text.insert(END, logmsg_in)

def gui_start():
  init_window = Tk()       #实例化出一个父窗口
  ZMJ_PORTAL = MY_GUI(init_window)
  # 设置根窗口默认属性
  ZMJ_PORTAL.set_init_window()
  init_window.mainloop()     #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示
gui_start()

简单的翻译小工具

Python GUI库Tkiner使用方法代码示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 输出一个两行字符的变量
Feb 05 Python
Python中文竖排显示的方法
Jul 28 Python
Python聚类算法之DBSACN实例分析
Nov 20 Python
python字符串过滤性能比较5种方法
Jun 22 Python
Python 比较两个数组的元素的异同方法
Aug 17 Python
pandas series序列转化为星期几的实例
Apr 11 Python
python实现反转部分单向链表
Sep 27 Python
在mac下查找python包存放路径site-packages的实现方法
Nov 06 Python
Pandas Shift函数的基础入门学习笔记
Nov 16 Python
Python 画出来六维图
Jul 26 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
Python爬虫爬取有道实现翻译功能
Nov 27 #Python
python爬虫中采集中遇到的问题整理
Nov 27 #Python
python 用opencv实现图像修复和图像金字塔
Nov 27 #Python
Python函数调用追踪实现代码
Nov 27 #Python
Numpy中np.max的用法及np.maximum区别
Nov 27 #Python
python 实现aes256加密
Nov 27 #Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 #Python
You might like
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
使用js获取地址栏中传递的值
2013/07/02 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
Python 必须了解的5种高级特征
2020/09/10 Python
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
幼儿园毕业家长感言
2014/02/10 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
2014年班组长工作总结
2014/11/20 职场文书
复活读书笔记
2015/06/29 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
《春酒》教学反思
2016/02/22 职场文书
详解Redis集群搭建的三种方式
2021/05/31 Redis
解析Redis Cluster原理
2021/06/21 Redis
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL