python tkinter 表格_python学习笔记(Tkinter编程利用Treeview实现表格自动更新)

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

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

直接上图

p><p>bmc=.jpg

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控件标题文字的定时更新与表格内容的自动更新

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值