使用Python的Tkinter库创建GUI(附实例:回归)

2023-05-16

我们前面介绍了树回归中的回归树模型树 两种回归方式。
本节我们首先将树回归和标准回归进行比较,然后创建出一个GUI,通过交互的形式更好去观察模型树和回归树之间的奥秘。

1. 树回归与标准回归的比较
我们之前介绍过几种回归模型,为了比较哪种模型更好?一个比较客观的方法就是计算相关系数( R2 值)。该相关系数可以直接去调用Numpy库中的corrcoef(yHat, y, rowvar=0)来直接求解,其中yhat是预测值,y是实际值。
这里先通过一些函数实现给定输入进行预测,之后利用这些函数计算三种回归模型的回归误差,最后调用corrcoef来比较相关系数。

# 用树回归进行预测
def regTreeEval(model, inDat):
    """
    回归树,为了和模型数函数参数一致,我们输入两个参数,但是只使用一个.
    model为输入叶节点
    """
    return float(model)
def modeltreeEval(model, inDat):
    '模型树'
    n = np.shape(indat)[1] # 输入测试数据的列数
    X = np.mat(np.ones((1, n+1)))
    X[:, 1:n+1] = inDat
    return float(X * model)
def treeForeCast(tree, inData, modelEval=regTreeEval):
    """
    在给定树结构下,对于输入的单个数据点或者行向量,返回预测值。
    最后一个参数是指明对叶节点数据进行预测函数的引用(回归数或模型数)
    """
    if not isTree(tree):
        modelEval(tree, inData) # 如果不是树结构,就进行预测。
    if inData[tree['spInd']] > tree['spVal']:
        # 二元切分,阈值两边,一个走左子树,一个走右子树
        if isTree(tree['left']):
            return treeForeCast(tree['left'], inData, modelEval)
        else:
            return modelEval(tree['left'], inData)
    else:
        if isTree(tree['right']):
            return treeForeCast(tree['right'], inData, modelEval)
        else:
            return modelEval(tree['right'], inData)

def createForeCast(tree, testData, modelEval=regTreeEval):
    """
    实现整个预测集上的运算
    """
    m = len(testData)
    yHat = np.mat(np.zeros((m, 1)))
    for i in range(m):
        yHat[i, 0] = treeForeCast(tree, np.mat(testData[i]), modelEval)
    return yHat

结果为::

这里写图片描述

我们知道相关系数越接近1越好,显然,模型树这一模型相比其他两个模型更好。
回归树,模型树的代码:
链接:http://pan.baidu.com/s/1slKsKXJ 密码:2ez4

2. 图形用户界面编程-Thinter的介绍
在回归树模型中,不同的参数ops,会有不同的树结构。但是每次在代码中手动调节ops,使得结果的分析显得困难。因此我们可以通过GUI来同时呈现数据和支持用户交互来更便捷的分析结果,也就是图形用户界面编程(GUI)
Python默认的GUI工具集是Tk,我们可以通过Python接口Tkinter来使用Tk。Tkinter是Python默认的GUI库,它基于Tk工具集,后者最初是为工具命令语言(Tcl)设计的。
安装 Tkinter模块: 请参考 http://blog.csdn.net/xyqzki/article/details/38414433

2.1 Tkinter与Python编程

要创建并运行你的GUI程序,下面有5个基本步骤:
1 导入Tkinter模块
2 创建一个顶层窗口对象,来容纳你的整个GUI程序
3 在你的顶层窗口对象上(或者其中)创建所有的GUI模块(以及功能)
4 把这些GUI模块与底层代码相连接
5 进入主事件循环

在开始逐步介绍前,我们先从宏观上介绍下GUI程序开发。
在GUI程序中,会有一个顶层根窗口对象,它包含所有小窗口对象。它们共同构成了一个完整的GUI程序,(这些小窗口对象可以是文字标签、按钮、列表框等),这些独立的GUI构件称为:组件
所以在创建GUI程序时,首先要创建一个顶层窗口,这实际上是指需要一个放置所有组件的地方:
注 Python3.3版本 改成tkinter

import tkinter
top = tkinter.Tk()

其中,tkinter.Tk()返回的对象通常被称为根窗口。顶层窗口是指那些在程序中独立显示的部分,可以创建多个底层窗口,但是只有一个是根窗口。
组件: 可以是独立的也可以作为容器存在。如果一个组件包含其他组件,它就可以认为是这些组件的父组件。通常组件会有一些相应的行为,如按下按钮,文本款写入等。这种形式的用户行为被称为行为事件,而GUI程序对时间所采取的响应动作被称为回调
用户操作从系统角度看都可以被看作是事件,GUI程序则是由这些伴随其始末的整套事件·体系所驱动,这个过程被称为事件驱动处理
Tk有两个坐标管理器用来协助吧组件放在正确的位置上:(1)‘包’:packer (2)网格:grid
一旦决定好所有组件的尺寸和尺寸方式,它将为你在屏幕上放置他们。当这些组件(包括顶层窗口)最终显示在屏幕上时,GUI程序会进入一个“服务器式”的无限循环。这个无限循环包括等待GUI事件、处理事件、然后返回等待模式。等待下一个事件。对Tkinter而言:

tkinter.mainloop()

这通常是程序执行的最后一段代码。

2.2 Tk组件
我们前面提到所有的主要组件都建立在顶层窗口对象内。这个对象是由Tk类创建的。Tk目前有15种组件。
这里写图片描述
实例1

#! -*- coding: utf-8 -*-
"""
创建一个标签显示“hello world!”
"""
import tkinter as tk

top =tk.Tk()  # 创建一个顶层窗口
label = tk.Label(top, text='hello world!') # 创建标签
label.pack() # 指明用packer来管理和显示组件
tk.mainloop() #调用mainloop运行GUI程序

这里写图片描述

实例2

#! /usr/bin/env python
# -*- coding : utf-8 -*-
import tkinter as tk
top = tk.Tk() 
quit = tk.Button(top, text='hello world!', command=top.quit)
 #创建按钮组件,有一个额外的参数: tk.quit()方法,这将给按钮装一个回调函数。按钮按下(并释放后)整个程序退出
quit.pack()
tk.mainloop()

这里写图片描述
实例3

#! -*- coding: utf-8 -*-
"""
组合实例1和2
"""
import tkinter as tk

top =tk.Tk()  # 创建一个顶层窗口
label = tk.Label(top, text='hello world!') # 创建标签
label.pack() # 指明用packer来管理和显示组件

quit1 = tk.Button(top, text='QUIT1', command=top.quit, bg='red', fg='white') # 参数添加了背景和前景颜色
quit1.pack() # fill参数告诉packer让QUIT按钮填充水平方向的剩余空间 expand填充了水平方向的所有可视空间,并拉伸按钮到窗口的左右边界

quit2 = tk.Button(top, text='QUIT2', command=top.quit, bg='red', fg='white')
quit2.pack(fill="x")

quit3 = tk.Button(top, text='QUIT3', command=top.quit, bg='red', fg='white')
quit3.pack(fill="x", expand=0)

quit3_1 = tk.Button(top, text='QUIT3_1', command=top.quit, bg='red', fg='white')
quit3_1.pack(fill="x", expand=1)

quit4 = tk.Button(top, text='QUIT4', command=top.quit, bg='red', fg='white')
quit4.pack(fill="y", expand=1)

quit5 = tk.Button(top, text='QUIT5', command=top.quit, bg='red', fg='white')
quit5.pack(fill="both", expand=0)

quit6 = tk.Button(top, text='QUIT6', command=top.quit, bg='red', fg='white')
quit6.pack(fill="both", expand=1)

tk.mainloop() #调用mainloop运行GUI程序

这里写图片描述
分析:(pack 不同参数的效果)
当 expand全为0时:
这里写图片描述
当 expand全为1时:
这里写图片描述

对比全0和全1的结果,可知:
(1)expand默认值为0,(不使用额外的空间即其余的空白
(2) 为0: 不用额外空间,都是最小的区域,只是在不同方向填充,从上到下排列
(3)为1(除 QUIT1): 使用额外的空间,随着我们拉动窗口,始终填满窗口

再看代码中的结果:
QUIT1 : pack() 全部默认参数,大小为容纳这个组件的最小区域。
QUIT2 : 在x方向填充,不使用额外空间
QUIT3 : 在x方向填充,不使用额外空间
QUIT3-1 : 在x方向填充,使用额外空间
QUIT4 : 在y方向填充,使用额外空间
QUIT5 : 在x,y方向都填充,不使用额外空间
QUIT6 : 在x,y方向都填充,使用额外空间

实例4

# 拖动滚动条,字体大小变化
import tkinter as tk

def resize(ev=None):  # 自己创建 回调函数
    label.config(font='Helvetica -%d bold' % scale.get()) # 设置Label文字的字体,字体大小为 scale滚动条的数字
top = tk.Tk()
top.geometry('960x540')  # 设置顶层窗口大小

label = tk.Label(top, text='Hello World!', font='Helvetica -18 bold')
label.pack(fill="y", expand=1)

scale = tk.Scale(top, from_=10, to=50, orient="horizontal", command=resize)
     #设置开始和结束值  注意from_的使用方式,在其后添加了"_",避免与关键字from的冲突'
     #orient可能值为: horizontal or vertical
     #回调函数
scale.set(10)
scale.pack(fill="x")
tk.mainloop()

这里写图片描述

3. 实例(回归)来体验GUI
在下一篇介绍

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python的Tkinter库创建GUI(附实例:回归) 的相关文章

  • C语言实现排序与组合

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)

    有一天我的androidHttpURLConnection 报这种错 你看 to reduce latency this class may reuse the same underlying Socket for 懂了吧 xff0c 我们
  • C语言解决四人/多人过桥问题

    参加笔试的时候遇到一道经典的算法题 xff0c 四人过桥问题 当时没写出来 x1f605 四人过桥问题 xff1a 在一个黑夜里 xff0c 有四个人需要过桥 xff0c 每次只能通过两人 xff0c 其中一人必须拿着手电筒 xff1b 但
  • C语言计算某一天是星期几

    span class token comment 1970年1月1日星期四 span span class token macro property span class token directive hash span span cla
  • 七牛云存储,上传一直超时

    今天在使用七牛云存储上传的时候 xff0c 遇到一个奇葩的问题 xff0c 就是一直上传超时 但是直接连接up qiniu com又是能够连接到的 而且iOS的有问题 xff0c android的没有问题 关于七牛云存储 xff1a htt
  • OSI七层网络参考模型详解

    1 什么是 OSI 模型 OSI 描述了计算机系统之间进行网络通信的模型 它是第一个网络通信标准模型 xff0c 在 1980 年代初期被所有主要计算机和电信公司采用 现代 Internet 不是基于 OSI xff0c 而是基于更简单的
  • Python制作简易OCR文字识别系统

    前不久看了一篇 如何使用Python检测和识别车牌 xff1f 用OpenCV对输入图像进行预处理 xff0c 用imutils将原始输入图像裁剪成所需的大小 xff0c 用pytesseract将提取车牌字符转换成字符串 车牌识别 但经实
  • PageHelper和Mybatis-plus分页的使用

    PageHelper和Mybatis plus分页的使用 一 PageHelper 准备sql span class token keyword CREATE span span class token keyword TABLE span
  • [RTC]系统时间NTP和RTC同步,Debian的时区配置

    转自 xff1a linux修改系统时间和linux查看时区 修改时区的方法 jiu 博客园 Debian的时区配置 一 修改时区 1 查看当前时区 命令 xff1a 34 date R 34 2 修改设置Linux服务器时区 方法 A 命
  • Autonomous Driving in Adverse Weather Conditions: A Survey - 恶劣天气条件下的自动驾驶:一项调查 (arXiv 2021)

    Autonomous Driving in Adverse Weather Conditions A Survey 恶劣天气条件下的自动驾驶 xff1a 一项调查 xff08 arXiv 2021 xff09 摘要1 引言2 自动驾驶汽车概
  • C#关于枚举类型Enum的用法详解,很细

    一 关键字enum的定义 enum是C语言中的一个关键字 xff0c enum叫枚举数据类型 xff0c 枚举数据类型描述的是一组整型值的集合 xff08 这句话其实不太妥当 xff09 xff0c 枚举型是预处理指令 define的替代
  • boost b2/bjam 参数说明

    b2 bjam 参数说明 xff1a b2 命令的功能强大 xff0c 用起来也比较复杂 xff0c 因此在使用之前 xff0c 最好先查看一下该命令的帮助 xff1a b2 exe help 以下是一些比较重要的参数说明 xff1a st
  • libssl-dev 安装失败 解决方案

    我本来是要安ettercap dependencs的 xff0c 没看到ettercap下面直接有可以使用的命令 xff0c 我上次看到了 xff0c 也提醒了自己 xff0c 但是这次我多花了5个小时搞定它 xff0c 包括了 ubunt
  • 离线文档浏览工具Zeal的下载和使用

    什么是Zeal xff1f Zeal是一款为软件开发人员提供的离线文档浏览器 截至2022年1月17日 xff0c Zeal可以下载查看207种编程语言或软件工具的帮助文档 Zeal Offline Documentation Browse
  • VS 之error MSB8020: The builds tools for v110_xp......

    VS错误如下 error MSB8020 The builds tools for v110 xp Platform Toolset 61 v110 xp cannot be found To build using the v110 xp
  • Ubuntu/Debian快速重装

    Linux系统更新升级非常快 xff0c 半年甚至几个月就会有新的版本出来 xff0c 虽然向Ubuntu能够自动升级到新的版本 xff0c 但是 xff0c 有时候升级可能效果不太好 xff0c 可能还是愿意选择重装 现在的Linux系统
  • Windows系统下QT+OpenCasCAD仿真开发

    背景 最近开发了一个六自由度机械臂调姿平台的控制软件 xff0c 集成了API激光跟踪仪和KUKA机器人 xff0c 实现了根据产品的测量位姿驱动仿真环境中模型并且实现模型间的碰撞检测 其中KUKA机器人的控制可以参考笔者以前的博客 xff
  • 通达信台阶而上成仙得道主图指标公式 副图 源码

    使用说明 上有压力线 下有支撑线 只要股价突破黄线 还有一波 效果图 直接复制以下源代码 在公式管理器中新建指标公式 复制进去就可以用了 仅供参考 KKK SMA H 11 1 N 3 CX IF KKK gt REF KKK 1 KKK
  • 有坐标的主买量占比主卖占比判断操盘通达信指标公式源码 附效果图

    使用说明 xff1a 适用通达信软件使用 xff0c 不同的软件使用要修改 直接复制以下源代码 xff0c 在公用管理器中新构建指标公用 xff0c 复制进去就可以用了 xff08 仅供参考 xff0c 下面有效果图 xff0c 可以先看看
  • 上年龄的笔记本升级固态硬盘和内存经验谈

    我的笔记本是15年买的Acer E5 422G系列 xff0c 当时花了3198元 xff0c 可以根据价格就知道 xff0c 配置不是很高 宏碁 xff08 acer xff09 E5 422G 41EF 14 英寸笔记本电脑 xff08

随机推荐

  • [技术讨论]keil常见问题报错及解决办法

    进行嵌入式开发过程中 xff0c keil是常用的一个工具 xff0c 但是在使用过程中经常会出现一些奇奇怪怪的问题 xff0c 其实很多问题都不难 xff0c 遇到过一次 xff0c 下次再遇到就知道怎么解决了 xff0c 我在这儿将我遇
  • PVE安装openwrt后,pve无法联网

    在pve中安装openwrt后 xff0c 有可能会出现pve系统无法连接外网的问题 有可能出现以下两种错误 xff1a 1 Temporary failure in name resolution 直接报dns的错误 2 failed N
  • Windows11/10 使用RDP远程桌面时提示 您的凭据不工作/登录没有成功可能的一种原因

    目录 看本文之前请先看问题背景解决 看本文之前请先看 微软官方的关于有关远程桌面客户端的常见问题 问题背景 Windows新装系统时就已经设置了Windows Hello 而登录系统时一直使用Windows Hello 未使用过密码进行登录
  • svn 查看检出记录

    http tortoisesvn net docs release TortoiseSVN zh CN tsvn repository hooks html 估计写一个服务器端的钩子脚本就能搞定 xff0c 你可以查阅相关的资料写一下 xf
  • C语言字符串——关于指针

    c字符串 我们知道在关于字符串的操作函数很多都包含在头文件 include lt string h gt 中 xff0c 例如计算字符串长度的函数strlen 今天我们们用自己的语言来实现一下关于字符串的复制 xff0c 连接 xff0c
  • MFC程序运行机制

    学MFC xff0c 竟然还不知道MFC的MAIN函数在什么地方 xff1f 怎么运行的 xff1f 实在不高明 看过候捷 JJHOU 老师的 深入浅出MFC 的 xff0c 对它一定很熟悉 呵呵 xff0c 本文是献给没有看过那本书 xf
  • Win7下硬盘安装Debian7.1

    在Ubuntu经常的崩溃和出问题的情况下 xff0c 终于决定转投Debian 在刻录光盘几次都失败后 xff0c 试着用硬盘安装的方式 xff0c 几经失败后 xff0c Debian终于装好了 xff0c 下面就把硬盘安装的方式写下来
  • iOS --- 为UISlider添加点击事件

    UISlider是iOS中非常常见的UI控件 继承自UIControl 可设置valueChanged等事件响应方法 但其默认不支持单击事件 本文即简单地实现了可单击选值的UISlider UISlider的常见IBAction Value
  • 阿里云linux服务器开启图形界面并用windows远程 并修改远程端口

    阿里云CentOS服务器安装图形界面 并安装xrdp远程 1 安装Gnonme yum groupinstall 34 GNOME Desktop 34 34 Graphical Administration Tools 34 y 如需卸载
  • 数论-约数和公式

    约数定义 约数 xff0c 又称因数 整数a除以整数b b 0 除得的商正好是整数而没有余数 xff0c 我们就说a能被b整除 xff0c 或b能整除a a称为b的倍数 xff0c b称为a的约数 在大学之前 xff0c 34 约数 34
  • 高手在民间——SDH、MSTP、OTN和PTN的区别和联系

    个人觉得作者总结得非常牛 xff0c 忍不住转载 分享 SDH MSTP OTN和PTN的区别和联系 首先要说的是TDM的概念 xff0c TDM就是时分复用 xff0c 就是将一个标准时长 xff08 1秒 xff09 分成若干段小的时间
  • bash:fdisk:command not found

    bash fdisk command not found lansir 64 Red Hat fdisk l bash fdisk command not found 原因是fdisk不在PATH路径中 lansir 64 Red Hat
  • java-A+B【NEUQACM】

    1002 A 43 B xff08 基本输入输出2 xff09 时间限制 1 Sec 内存限制 128 MB 提交 979 解决 668 提交 状态 讨论版 题目描述 输入两个数A B xff0c 输出A 43 B的值 输入 第一行是数据的
  • Opencv调取摄像头失败的处理方法

    最近想学习一下opencv xff0c 就弄了一本 学习opencv 的书看 xff0c 书中的例子也随便敲一敲 可是 xff0c 在调去摄像头时出现了如下问题 具体代码如下 xff1a include 34 stdafx h 34 inc
  • Python编辑器 Sublime text2 +JEDI(python自动补全插件)

    以前写python的时候都是用eclipse写的 用mac后 xff0c 今天突然看到了这个Sublime text2 xff0c 目测很好用 先记下来 xff0c 到时再来补充 Win Linux gt cmd 43 shifp 43 p
  • 连接MySQL出现Host is not allowed to connect to this MySQL server 解决方法

    一 报错的原因 xff1f 英语翻译 不允许主机连接到此MySQL服务器 xff08 意思是本地账号连接可以登录 xff0c 但是远程登陆不行 xff09 二 解决步骤 1 打开cmd 进入到php的bin文件 2 以下命令按顺序执行 1
  • Debian 安装并切换配置使用 Xfce 4 桌面环境

    1 首先 使用 sudo tasksel 选择安装 Xfce 4 环境 或者 通过 sudo apt install kali defaults kali root login desktop base xfce4 xfce4 places
  • Qt 设置Widget背景图片并实现透明度的三种方式

    一 场景 在平常的开发过程中 xff0c 我们常常会遇到需要设置Widget窗口背景图片透明度的方式 一般会有三种方式可以进行设置 二 方式一 xff08 使用图形遮罩功能SetMask函数 xff09 class BackGroundWi
  • 穿山甲的广告聚合平台-GroMore

    很多同学微信私聊问我 xff0c TogetherAd 和其他市面上的广告聚合平台有什么区别 xff1f 接了你这个收入会不会提高啊 xff1f 毕竟个人时间有限 xff0c 我很难每个同学都去详细的回答 这篇文章我们就深入的探讨一下 我见
  • 使用Python的Tkinter库创建GUI(附实例:回归)

    我们前面介绍了树回归中的回归树和模型树 两种回归方式 本节我们首先将树回归和标准回归进行比较 xff0c 然后创建出一个GUI xff0c 通过交互的形式更好去观察模型树和回归树之间的奥秘 1 树回归与标准回归的比较 我们之前介绍过几种回归