python - tkinter Treeview:使用标签和 tag_configured 更改树视图中的偶数和奇数行颜色根本不起作用
问题描述
我一直很难找到我的解决方案,其中 tags 和 tag.configured 无法更改我的奇数行和偶数行背景颜色以轻松查看库存列表中的行,即使我正在复制示例代码但仍然无法工作为了我。为了进一步理解这个问题,这是我们遇到问题的代码部分:
for record in records:
#print(sorted(str(record[0]), reverse=False))
col_head.insert("", "end", text=record, values=(record[0], record[1], record[2], record[3], record[4], record[5]), tags=('ODDROW'))
col_head.tag_configure('ODDROW', background='gray')
并在执行时。. .
库存中的 Treeview 甚至不会显示任何灰色背景或我尝试在 tag_configure 中输入的其他颜色,如果您想查看整个程序,这里是
from tkinter import *
from tkinter import ttk
from datetime import datetime
import sqlite3
import os
from tkinter import *
from tkinter import ttk
from datetime import datetime
import sqlite3
import os
def invent():
def inventory_tab():
invent_display = Tk()
invent_display.geometry("1250x650")
invent_display.configure(bg="gray")
invent_display.title("Inventory Tab")
#Name of the Retailer FRAME1
title_box = Frame(invent_display, width=1000, height=100, pady=5, bd=10, background='light blue', relief="raise")
title_box.grid(column=1, row=1)
retailer_name = Label(title_box, text='retailer name', width=50, height=1, bd=2, font=("Calibri", 35), relief="sunken")
retailer_name.grid(column=0,row=0, pady=5)
#Date FRAME2
dtformat = datetime.now()
date_time_format = dtformat.strftime("%d/%m/%Y %H:%M:%S")
date_and_time = Label(title_box, text=date_time_format, width=50, height=1, bd=2, font=("Calibri", 20), fg='green', relief="sunken")
date_and_time.grid(column=0,row=1)
# INVENTORY LIST FRAME3
inventory_list = Frame(invent_display, width=500, height=500, bd=10, pady=10, relief="sunken")
inventory_list.grid(column=1, row=2)
# treeview Multiple Column
col_head = ttk.Treeview(inventory_list,
column=("prod_id", "p_name", "p_brand", "initial_stock", "stock", "price" ),
show='headings')
#scrollbar in the Column
invent_scroll = Scrollbar(inventory_list, orient="vertical", command=col_head.yview)
invent_scroll.grid(column=2,row=1, sticky=NS)
col_head.configure(yscrollcommand=invent_scroll.set)
#heading TItle
col_head.heading("#1", text="Product ID")
col_head.heading("#2", text="Product Name", anchor=W)#, command=inventory_sort)
col_head.heading("#3", text="Product Brand")
col_head.heading("#4", text="Initial Stock")
col_head.heading("#5", text="Stock")
col_head.heading("#6", text="Price")
col_head.grid(column=1, row=1)
# Input Values from Database
# Create Database
conn = sqlite3.connect('Inventory_table.db')
# Create cursor
c = conn.cursor()
# print
c.execute("SELECT prod_id, p_name, p_brand, initial_stock, stock, price FROM inventory")
records = c.fetchall()
for record in records:
#print(sorted(str(record[0]), reverse=False))
col_head.insert("", "end", text=record, values=(record[0], record[1], record[2], record[3], record[4], record[5]), tags=('ODDROW'))
col_head.tag_configure('ODDROW', background='blue')
# BUTTON ORGANIZE FRAME4
button_organize = Frame(invent_display, width=1200, height=250, pady=5, bd=10, relief="raise")
button_organize.grid(column=1, row=3)
#Column1 add record FRAM4
add_record_label = Label(button_organize, text='Add Record Tab', width=71, height=3, bg='pink')
add_record_label.grid(column=1,row=0)
add_rec_frame = Frame(button_organize, width=400, height=250, bd=2, pady=5, relief="raise")
add_rec_frame.grid(column=1,row=1)
#LABEL
p_name_label = Label(add_rec_frame, text='Product Name:')
p_name_label.grid(row=0, column=0, pady=(10, 0))
p_brand_label = Label(add_rec_frame, text='Product Brand:')
p_brand_label.grid(row=1, column=0)
initial_stock_label = Label(add_rec_frame, text='Initial Stock: ')
initial_stock_label.grid(row=2, column=0)
stock_label = Label(add_rec_frame, text='Stock:')
stock_label.grid(row=3, column=0)
price_label = Label(add_rec_frame, text='Price:')
price_label.grid(row=4, column=0)
#ENTRY
p_name = Entry(add_rec_frame, width=30)
p_name.grid(row=0, column=1, padx=20, pady=(10, 0))
p_brand = Entry(add_rec_frame, width=30)
p_brand.grid(row=1, column=1, padx=20)
initial_stock = Entry(add_rec_frame, width=30)
initial_stock.grid(row=2, column=1, padx=20)
stock = Entry(add_rec_frame, width=30)
stock.grid(row=3, column=1, padx=20)
price = Entry(add_rec_frame, width=30)
price.grid(row=4, column=1, padx=20, pady=5)
#BUTTON
add_btn = Button(add_rec_frame, text="Add record")#, command=add_record)
add_btn.grid(row=1, column=2, columnspan=2, padx=5, pady=5, ipadx=58)
clear_btn = Button(add_rec_frame, text="Clear Entry")#, command=add_record)
clear_btn.grid(row=3, column=2, columnspan=2, padx=5, pady=5, ipadx=58)
#Column2 edit/search/delete recordsFRAM4
#Column3 inventory setting FRAM4
invent_display.mainloop()
# Insert Variable Here only used for Inventory Tab
table_checker = os.listdir()
if 'Inventory_table.db' in table_checker:
# Create Database
conn = sqlite3.connect('Inventory_table.db')
# Create cursor
c = conn.cursor()
inventory_tab()
else:
# Create Database
conn = sqlite3.connect('Inventory_table.db')
# Create cursor
c = conn.cursor()
c.execute("""CREATE TABLE inventory (
prod_id integer,
p_name text,
p_brand text,
initial_stock integer,
stock integer,
price integer
)""")
inventory_tab()
invent()
顺便说一句,我是 python 新手,最近了解了 tkinter 和一些东西。因此,非常感谢任何帮助和建议。
顺便说一句,这段代码需要一个数据库,如果你要运行程序Inventory_table.db ,这个文件就在这里
再次提前感谢您的帮助!
PS 我在 Pycharm 的 IDE 中使用 Python 3.8 作为我的项目解释器
编辑:我使用的基于 tkinter.TclVersion 的 tkinter 版本是 8.6 版
解决方案
推荐阅读
- angular - 角度 4 选择框和禁用按钮
- image - 图片不在 Flatlist 中渲染,但在打开 modal 时出现
- amazon-web-services - 创建多个 AWS EBS 卷并使用 Terraform 将其附加到实例
- c - 做'&&'和'||' 位于运算符优先级的同一行还是在不同的行?
- node.js - 如何将 Windows 证书存储中的证书添加到节点发布请求
- java - 使用 Tanuki Service Wrapper 包装 Spring Boot 应用程序
- vbscript - 测试完全自动化 - 等待对象加载的问题
- php - PHP将sql查询存储在数组中,使用数组索引访问每一列
- python - 如何解决flask.ext错误
- jquery - 如何从 JSON 数组中的嵌入对象中检索值?