如何在TKINTER Treeview GUI上计算和显示不同列的多行?

2024-06-02 08:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我的程序需要在Tkinter Treeview上计算并显示库存中可用资产的数量。我在GUI上打印设备类型列(最后一张图像)的方法是使用从设备类型查询中选择,该查询列出GUI上显示的设备类型表中的11行。随后,我需要打印每种设备类型的总项目、不可用项目和可用项目。例如,如果总共有10个集成面板,则3个可用,7个不可用。实现这一目标最简单、最有效的方法是什么?下面的代码片段用于将设备类型插入GUI。更容易列出设备类型,因为它只是表中的一列。对于可用性,我无法想象一个更简单的方法来做这件事。谢谢

command = "SELECT `Equipment Type` FROM `Equipment Types`"
mycursor.execute(command)
results = mycursor.fetchall()

for i in range(len(results)):
  results[i] = list(results[i])

  tree.insert("", "end", str(results[i][0]), text = str(results[i][0]), tag = [[i][0]], open = TRUE)

Equipment type

Inventory

GUI output

Treeview fragment

edited treeview

new GUI output

refresh

def refresh_clicked(self):
        self.destroy()
        self.__init__()
        
        button_refresh = tk.Button(topframe, text = "Refresh", state = NORMAL, command = self.timed_refresh)
        button_refresh.grid(row = 1, column = 2, sticky = W, padx = 5, pady = 2)

Tags: 项目方法textself程序类型tkintergui
2条回答

由于缺少有关SQL表的详细信息,下面是一个“最佳猜测”,可以从表中获取每种类型的可用和不可用资产的数量

SELECT 
 Inventory.'Equipment Type',
 COUNT(Inventory.'Equipment Type') AS 'Total',
 COUNT(case Inventory.Available when 'Available' then 1 else null end) AS 'Available',
 COUNT(case Inventory.Available when 'Unavailable' then 1 else null end) AS 'Unavailable' 
FROM 
 Inventory
GROUP BY 
 Inventory.'Equipment Type';

用我的小假数据集返回

Equipment Type |  Total | Available | Unavailable
     A         |    2   |     1     |   1
     B         |    2   |     2     |   0

您可以使用SQL来获取所需内容:

command = """
SELECT
  et.`Equipment Type`,
  COUNT(i.`Equipment Type`) Total,
  SUM(IF(`Status`="Unavailable",1,0)) Unavailable,
  SUM(IF(`Status`="Available",1,0)) Available
FROM `Equipment Types` et
LEFT JOIN Inventory i ON et.`Equipment Type` = i.`Equipment Type`
GROUP BY 1
ORDER BY 1
"""

mycursor.execute(command)

for row in mycursor:
    tree.insert("", "end", values=row)

相关问题 更多 >