【Tkinter界面:练习-01】窗口-部件-布局

news2024/9/20 18:32:10

一、说明

        python在用户界面开发中,其中有QT5,和Tkinter;对于实际项目,界面需要高大上,因此用QT5,对于开发人员的演示程序,或简单程序中,不建议QT5;用Tkinter已经足够。本文做一个Tkinter练习,将最基本的功能实现起来,就是花费少的时间,实现更多的效益。

二、最基本窗口实现

2.1 导入程序包

 包导入

from tkinter import *
from tkinter import ttk

2.2 窗口、应用、隐窗口 

        作为Tkinter的窗口,由两个方面组成:显式Frame窗口,隐式窗口;还有应用实体作为总体,如图所示:

        程序中显式Frame窗口,隐式窗口;应用实体三者的关系是:

  • 程序中至少有一个app(也就是root)
  • 程序中至少有一个Frame
  • Frame是可以看见的对象,隐窗口是可见窗口的属性参数。
  • 设定Frame的属性,需要通过app(root)访问。
  • 隐含窗口不是对象,不需要专门生成。

2.3 显式生成root和Frame

root = Tk()
frm = ttk.Frame(root, padding=10)
frm.grid()
root.geometry("300x300")
root.mainloop()

2.4 隐含root生成窗口

frm = ttk.Frame(None)
frm.master.title('Sample application')
frm.master.geometry("300x300")
frm.mainloop()

2.5 加点小控件

​
from tkinter import *
from tkinter import ttk
root = Tk()
frm = ttk.Frame(root, padding=10)
frm.grid()
root.geometry("300x300")
ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)
root.mainloop()

2.6 封装的窗口

​

#!/usr/bin/env python      1
import Tkinter as tk       2
 
class Application(tk.Frame):              3
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)   4
        self.grid()                       5
        self.createWidgets()
 
    def createWidgets(self):
        self.quitButton = tk.Button(self, text='Quit',
            command=self.quit)            6
        self.quitButton.grid()            7
 
app = Application()                       8
app.master.title('Sample application')    9
app.master.geometry("300x300") 10
app.mainloop()

​

三、关于小控件

3.1 实现一个完整窗口

        首先设计一个窗口,将Frame和widget的布局设计好,如下图:

3.2 实现窗口

语句含义
master = Tk()# 生成Tkinter主窗口
l1 = Label(master, text="Height")
l2 = Label(master, text="Width")
生成文字标签对象,根是主窗
l1.grid(row=0, column=0, sticky=W, pady=2)
l2.grid(row=1, column=0, sticky=W, pady=2)

# grid 方法分别排列标签

# 指定的行和列,

# sticky是控件在cell的摆放见下面。

e1 = Entry(master)
e2 = Entry(master)

# 条目小部件,用于从用户那里获取条目
e1.grid(row=0, column=1, pady=2)
e2.grid(row=1, column=1, pady=2)
# 这将排列条目小部件
e1 = Entry(master)
e2 = Entry(master)
# 条目小部件,用于从用户那里获取条目

img = PhotoImage(file= "prize.png")
img1 = img.subsample(2, 2)

# 添加图像(记住图像应该是 PNG 而不是 JPG)
Label(master, image=img1).grid(row=0, column=2,
                               columnspan=2, rowspan=2, padx=5, pady=5)
# 创建标签,并贴上图片

3.3 关于sticky

        在cell中如何摆放小控件?sticky=tk.??,其中??就是如下图所指定

  • 如果您不提供粘性属性,则默认行为是将小部件在单元格中居中。
  • 您可以使用 Sticky=tk.NE(右上角)、tk.SE(右下角)、tk.SW(左下角)或 tk.NW(左上角)将小部件放置在单元格的一角。
  • 您可以使用 Sticky=tk.N(顶部中心)、tk.E(右侧中心)、tk.S(底部中心)或 tk.W(左侧中心)将小部件定位在单元格一侧的中心。
  • 使用 Sticky=tk.N+tk.S 垂直拉伸小部件,但使其水平居中。
  • 使用 Sticky=tk.E+tk.W 水平拉伸它,但使其垂直居中。
  • 使用 Sticky=tk.N+tk.E+tk.S+tk.W 水平和垂直拉伸小部件以填充单元格。
  • 其他组合也将起作用。例如,sticky=tk.N+tk.S+tk.W 将垂直拉伸小部件并将其放置在西(左)墙上。

3.4 全部代码如下

from tkinter import *
from tkinter.ttk import *

# creating main tkinter window/toplevel
master = Tk()

# this will create a label widget
l1 = Label(master, text="Height")
l2 = Label(master, text="Width")

# grid method to arrange labels in respective
# rows and columns as specified
l1.grid(row=0, column=0, sticky=W, pady=2)
l2.grid(row=1, column=0, sticky=W, pady=2)

# entry widgets, used to take entry from user
e1 = Entry(master)
e2 = Entry(master)

# this will arrange entry widgets
e1.grid(row=0, column=1, pady=2)
e2.grid(row=1, column=1, pady=2)

# checkbutton widget
c1 = Checkbutton(master, text="Preserve")
c1.grid(row=2, column=0, sticky=W, columnspan=2)

# adding image (remember image should be PNG and not JPG)
img = PhotoImage(file= "prize.png")
img1 = img.subsample(2, 2)

# setting image with the help of label
Label(master, image=img1).grid(row=0, column=2,
                               columnspan=2, rowspan=2, padx=5, pady=5)

# button widget
b1 = Button(master, text="Zoom in")
b2 = Button(master, text="Zoom out")

# arranging button widgets
b1.grid(row=2, column=2, sticky=E)
b2.grid(row=2, column=3, sticky=E)

# infinite loop which can be terminated
# by keyboard or mouse interrupt
mainloop()

最基本的窗口实现,这里提出两个方法,各自实现,并对照。

方法1:

方法2:

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

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

相关文章

高并发(水平扩展,垂直扩展)

高并发(水平扩展,垂直扩展) 一、什么是高并发 高并发(High Concurrency) 是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指, 通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有 响…

Cenos7安装小火车程序动画

一:替换安装源 #先安装一下 epel源,因为安装包在epel源中。 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [rootwww ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo --2023-09-01 18:5…

Leetcode 44 通配符匹配

Leetcode44通配符匹配 题解1 枚举情况(数学思维)题解2 DP 给你一个输入字符串 (s) 和一个字符模式 ,请你实现一个支持 ‘?’ 和 ‘*’ 匹配规则的通配符匹配: ‘?’ 可以匹配任何单个字符‘*’ 可以匹配任意字符序列&#xff0…

成都瀚网科技有限公司:抖店的评论会消失吗?

抖店是抖音推出的电子商务平台。很多用户在购物后都会对产品进行评价。但有时用户可能会发现抖店评论缺失,让用户产生一些疑惑和困惑。本文将围绕这个问题提供一些答案和解决方案。 1.为什么抖店评论不见了? 首先需要明确的是,抖店评论消失可…

异步电机电压型磁链观测器改进-LPF串联HPF+基于时间向量分析的稳态补偿的改进策略

导读​:针对低通滤波环节替换电压模型纯积分环节加反馈补偿的改进方法,磁链估计仍然存在幅值和相位误差​的问题,本期文章介绍采用LPF串联HPF替换纯积分环节,然后基于时间向量分析的稳态补偿策略来对电压模型进行改进​。仿真结果…

复现XSS漏洞及分析

XSS漏洞概述: 类型一:反射型 类型二:存储型 类型三:DOM型 复现20字符短域名绕过 一、安装BEEF 1、在Kali中运行apt install beef-xss 2、运行beef 3、在浏览器访问 二、安装galleryCMS *遇到一点小问题 提示"last…

手写Mybatis:第5章-数据源的解析、创建和使用

文章目录 一、目标:数据源的解析、创建和使用二、设计:数据源的解析、创建和使用三、实现:数据源的解析、创建和使用3.1 引入依赖3.2 工程结构3.3 数据源解析、创建和使用关系图3.4 事务管理接口和事务工厂3.4.1 事务的隔离级别3.4.2 定义事务…

重新理解百度智能云:写在大模型开放后的24小时

在这些回答背后共同折射出的一个现实是——大模型不再是一个单选题,而更是一个综合题。在这个新的时代帆船上,产品、服务、安全、开放等全部都需要成为必需品,甚至是从企业的落地层面来看,这些更是刚需品。 作者| 皮爷 出品|产…

大数据课程K12——Spark的MLlib概述

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的MLlib概念; ⚪ 掌握Spark的MLlib基本数据模型; ⚪ 掌握Spark的MLlib统计量基础; 一、Spark MLlib介绍 1. 概述 MLlib是Apache Spark的可迭代机器学习库。 2. 易于使用 …

改革企业治理结构,建立国有企业全面预算管理制度

随着我国市场经济的推广,国有企业进入到改革发展的必经之路上,企业应当结合自身实际情况加强成本管控,提高管理效率,为企业的发展提供有力保障。近年来,全面预算管理的理念在国有企业实施范围内不断扩大,加…

联发科MTK6762/MT6762核心板_安卓主板小尺寸低功耗4G智能模块

MT6762安卓核心板是一款基于MTK平台的高性能智能模块,是一款工业级的产品。该芯片也被称为Helio P22。这款芯片内置了Arm Cortex-A53 CPU,最高可运行于2.0GHz。同时,它还提供灵活的LPDDR3/LPDDR4x内存控制器,此外,Medi…

5年前我们摸爬滚打进入测试行业,如今的你后悔吗?

记得在求职的时候,面试官经常问我:“为什么要选择软件测试工作?”而我也会经常说一堆自己有的没的优势去应付。 工作这么久了,也不再浮躁,静下心来回忆当初选择软件测试工作的历程,也是对自己职业生涯的一次回顾。 一…

GreenPlum的gpfdist使用与原理流程分析

一、简介 GreenPlum 的数据导入功能作为对数据源的一种扩充,数据导入的方式有: 1、insert 该方式通过 sql 语句,把数据一条一条插入至表中。这种方式,不仅读取数据慢(一条一条读取),且数据需要…

我们学到的关于减少客户流失的 4 个经验教训

客户流失 – 这两个词会让任何企业主的脊背不寒而栗。用最简单的术语来说,它是在特定时间内停止使用您的服务的客户百分比。这很糟糕,但这并不全是厄运和阴霾。我们已经通过四个简单的步骤研究了如何减少客户流失,并与您分享这些秘密。请继续…

SP1545L肖特基二极管厂家

目前,市面上供应肖特基二极管的厂家、供应商特别地多,更多选择的背后,带来的却是更多的迷茫和不知所措。采购肖特基二极管,哪家好呢?提及“东沃电子DOWOSEMI”这个国产二极管品牌,很多客户可能第一想到他家…

部署Django报错-requires SQLite 3.8.3 or higher

记一次CentOS7部署Django项目时的报错 问题出现 在部署测试环境时,有需要用到一个python的后端服务,要部署到测试环境中去 心想这不是so easy吗,把本地调试时使用的python版本及Django版本在服务器上对应下载好,然后直接执行命…

AWS-数据库迁移工具DMS-场景:单账号跨区域迁移RDS for Mysql

参考文档: 分为几个环节: 要使用 AWS DMS 迁移至 Amazon RDS 数据库实例: 1.创建复制实例 有坑内存必须8g或者以上,我测试空库 都提示内存不足 2.创建目标和源终端节点 目标空库也得自己创建哈 3.刷新源终端节点架构 4.创建迁…

FrameWork的概述与启动过程

FrameWork框架 Framework定义了客户端组件和服务端组件功能及接口。以下阐述中,“应用程序”一般是指“.apk”程序。 框架中包含三个主要部分,分别为服务端、客户端和Linux驱动。 服务端 服务端主要包含两个重要类,分别是WindowManagerSe…

jsch网页版ssh

使用依赖 implementation com.jcraft:jsch:0.1.55Server端代码 import com.jcraft.jsch.Channel; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.TimeUnit; import o…

django项目改名字后顺利运行、ModelSerializer使用、模块与包的使用、反序列化校验源码分析、断言、drf之请求、魔法方法之点(.)拦截

一 django项目改名字后顺利运行 1 先改文件夹名 2 改项目名 3 改 项目内的文件夹名 4 替换掉所有文件中的 drf_day04_02 ---》drf_day05 5 命令行中启动:python manage.py runserver 6 setting--->django--->指定项目根路径二 同时创建作者和作者详情表(一对…