博主今天总结这段时间抽空写的一个GUI编程项目

功能是查看本地打印机队列,可选择指定队列重新打印

直接上图

UI设计包括3个区域左上方,右上方和下方列表区域

使用网格grid方法来分配位置

下面是界面设计的代码

 #!/usr/bin/env python
# -*- coding: utf-8 -*- from Tkinter import *
from printer_pywin32 import PrinterPywin32
import ttk class PrinterTkinter:
def __init__(self):
self.root = Tk()
self.root.title("打印机监控系统") self.frame_left_top = Frame(width=400, height=200)
self.frame_right_top = Frame(width=400, height=200)
self.frame_center = Frame(width=800, height=400)
self.frame_bottom = Frame(width=800, height=50) # 定义左上方区域
self.left_top_title = Label(self.frame_left_top, text="打印状态:", font=('Arial', 25))
self.left_top_title.grid(row=0, column=0, columnspan=2, sticky=NSEW, padx=50, pady=30) self.var_success = StringVar() # 声明成功数
self.var_false = StringVar() # 声明失败数 self.left_top_frame = Frame(self.frame_left_top)
self.left_top_frame_left1 = Label(self.frame_left_top, text="打印成功数", font=('Arial', 20))
self.left_top_frame_left2 = Label(self.frame_left_top, textvariable=self.var_success, font=('Arial', 15))
self.get_success() # 调用方法更新成功数
self.left_top_frame_right1 = Label(self.frame_left_top, text="打印失败数", font=('Arial', 20))
self.left_top_frame_right2 = Label(self.frame_left_top, textvariable=self.var_false, font=('Arial', 15))
self.get_false() # 调用方法更新失败数
self.left_top_frame_left1.grid(row=1, column=0)
self.left_top_frame_left2.grid(row=1, column=1)
self.left_top_frame_right1.grid(row=2, column=0)
self.left_top_frame_right2.grid(row=2, column=1) # 定义右上方区域
self.var_entry = StringVar() self.right_top_title = Label(self.frame_right_top, text="重新打印的任务编号:", font=('Arial', 20))
self.right_top_entry = Entry(self.frame_right_top, textvariable=self.var_entry) self.number = int
self.right_top_button = Button(self.frame_right_top, text="确定", command=self.button_restart, font=('Arial', 15))
self.right_top_title.grid(row=0, column=0)
self.right_top_entry.grid(row=1, column=0)
self.right_top_button.grid(row=2, column=0, padx=20, pady=20) # 定义中心列表区域
self.tree = ttk.Treeview(self.frame_center, show="headings", height=18, columns=("a", "b", "c", "d", "e"))
self.vbar = ttk.Scrollbar(self.frame_center, orient=VERTICAL, command=self.tree.yview)
# 定义树形结构与滚动条
self.tree.configure(yscrollcommand=self.vbar.set) # 表格的标题
self.tree.column("a", width=50, anchor="center")
self.tree.column("b", width=200, anchor="center")
self.tree.column("c", width=200, anchor="center")
self.tree.column("d", width=100, anchor="center")
self.tree.column("e", width=150, anchor="center")
self.tree.heading("a", text="编号")
self.tree.heading("b", text="打印时间")
self.tree.heading("c", text="打印名称")
self.tree.heading("d", text="打印任务编号")
self.tree.heading("e", text="打印状态") # 调用方法获取表格内容插入
self.get_tree()
self.tree.grid(row=0, column=0, sticky=NSEW)
self.vbar.grid(row=0, column=1, sticky=NS) # 整体区域定位
self.frame_left_top.grid(row=0, column=0, padx=2, pady=5)
self.frame_right_top.grid(row=0, column=1, padx=30, pady=30)
self.frame_center.grid(row=1, column=0, columnspan=2, padx=4, pady=5)
self.frame_bottom.grid(row=2, column=0, columnspan=2) self.frame_left_top.grid_propagate(0)
self.frame_right_top.grid_propagate(0)
self.frame_center.grid_propagate(0)
self.frame_bottom.grid_propagate(0) self.root.mainloop() # 得到打印成功数
def get_success(self):
self.var_success.set(PrinterPywin32.get_success())
self.left_top_frame_left2.after(500, self.get_success) # 得到打印失败数
def get_false(self):
self.var_false.set(PrinterPywin32.get_false())
self.left_top_frame.after(500, self.get_false) # 表格内容插入
def get_tree(self):
# 删除原节点
for _ in map(self.tree.delete, self.tree.get_children("")):
pass
# 更新插入新节点
for i in range(len(PrinterPywin32.get_enumjobs())):
self.tree.insert("", "end", values=(i + 1, PrinterPywin32.get_enumjobs()[i]["Submitted"],
PrinterPywin32.get_enumjobs()[i]["pPrinterName"],
PrinterPywin32.get_enumjobs()[i]["JobId"],
PrinterPywin32.get_enumjobs()[i]["Status"]))
self.tree.after(500, self.get_tree) # 重新打印
def button_restart(self):
self.number = self.right_top_entry.get()
PrinterPywin32.printer_restart(self.number) if __name__ == '__main__':
PrinterTkinter()

这里实现了Label控件标题文字的定时更新与表格内容的自动更新

python学习笔记(Tkinter编程利用Treeview实现表格自动更新)的更多相关文章

  1. Python学习笔记-CGI编程(如何在IIS上挂Python开发的Webservice)

    一.如何用Python开发一个简单的Webservice 利用python的cgi编程,可以传入参数将结果输出. 定义需要编码以及需要引用的模块 #conding=utf-8 #修正中文乱码 impo ...

  2. python学习笔记08-- socket编程

    本节内容: 一.网络基础知识 二.socket概念及相关语法 2.1socket概念 2.2socket解释 2.3socket模块功能介绍 2.4socket粘包问题 2.5Socket多并发 一. ...

  3. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

  4. Python学习笔记九

    Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...

  5. Deep learning with Python 学习笔记(8)

    Keras 函数式编程 利用 Keras 函数式 API,你可以构建类图(graph-like)模型.在不同的输入之间共享某一层,并且还可以像使用 Python 函数一样使用 Keras 模型.Ker ...

  6. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  7. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

  8. [Python学习笔记]文件的读取写入

    文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...

  9. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

随机推荐

  1. Object-c-数组的使用

    一.数组: 1.数组初始化: a.NSArray *array = [[NSArray alloc] init]; b.NSArray *array = [[NSArray array]; 2.初始化 ...

  2. 程序员书单_java学习基础编程篇

    Java程序设计语言.(美国)阿诺德.清晰版 http://download.csdn.net/detail/shenzhq1980/9076093 JAVA2核心技术第1卷.基础知识7th.part ...

  3. 剑指offer系列30-----删除链表中重复的节点

    [题目]在一个排序的链表中,存在重复的结点, * 请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. * 例如,链表1->2->3->3->4->4->5 ...

  4. 【sql】之使用sql根据身份证查询过生日人数

    根据当前日期查询有多少人过生日 ,) = DATE_FORMAT(NOW(),'%m'); 查询price一样的人数 select * from people where price in (sele ...

  5. android关于AndroidManifest.xml详细分析

    http://my.eoe.cn/1087692/archive/5927.html 一.关于AndroidManifest.xmlAndroidManifest.xml 是每个android程序中必 ...

  6. (C/C++) Interview in English - Points.

    Q: What is a dangling pointer? A: A dangling pointer arises when you use the address of an object af ...

  7. BestCoder Round #85 hdu5776 sum

    sum 题意: 问题描述 给定一个数列,求是否存在连续子列和为m的倍数,存在输出YES,否则输出NO 输入描述 输入文件的第一行有一个正整数T,表示数据组数. 接下去有T组数据,每组数据的第一行有两个 ...

  8. Hadoop中两表JOIN的处理方法(转)

    1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...

  9. 从源代码制作deb包的两种方法以及修改已有deb包(转载)

    From:http://yysfire.github.io/linux/%E4%BB%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%B6%E4%BD%9Cdeb%E5%8C% ...

  10. tar.gz和rpm安装文件(转载)

    from:http://bbs.chinaunix.net/thread-2277750-1-1.html Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容 ...