如何在tkinter的画布上添加标签小部件?

2024-05-16 09:51:01 发布

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

所以我有这段代码,它从数据库中提取新值并不断更新应用程序。它的问题是,我需要以某种有吸引力的方式显示这些值,我需要canvas,但我无法这样做。 画布坏了。它没有任何应用程序的形状。我肯定我犯了个错误,但我不知道是什么。帮帮我谢谢。在

代码:

import Tkinter as tk
import sqlite3
import string
import time
import sys
from constants import DELAY,DB_PATH

def update_data_for_cod_bod():

    conn = sqlite3.connect('ubiqx_db.db')
    c = conn.cursor()
    execute_query = c.execute('''select cod,bod,tss from front_end_data 
    where slave_id=1''')
    result_set = c.fetchall()
    data_for_cod = 0
    data_for_bod = 0
    data_for_tss = 0
    for row in result_set:
        data_for_cod = row[0]
        data_for_bod = row[1]
        data_for_tss = row[2]

    lbl_cod_data["text"] = "COD             "+str(data_for_cod)
    lbl_bod_data["text"] = "BOD             " + str(data_for_bod)
    lbl_tss_data["text"] = "TSS             " + str(data_for_tss)
    root.after(DELAY, update_data_for_cod_bod)  # Call this function again 
    after DELAY ms.

def exit(event):
    root.quit()

root = tk.Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.overrideredirect(1)
root.geometry("%dx%d+0+0" % (h, w))

root.title("COD_BOD")
root.configure(background='black')
root.bind("<Escape>", exit)

canvas = tk.Canvas(root, width=h, height=w, highlightthickness=0)
canvas.grid(row=0,column=0)
blackline = canvas.create_line(100, 100, 800, 100, fill="yellow")


lbl_cod_data = tk.Label(canvas, text="", font=("Times New Roman", 50, 
"bold"), bg="black", fg="white")
lbl_cod_data.grid(row=0,column=0)
lbl_bod_data = tk.Label(canvas, text="", font=("Times New Roman", 50, 
"bold"), bg="black", fg="white")
lbl_bod_data.grid(row=1,column=0)
lbl_tss_data = tk.Label(canvas, text="", font=("Times New Roman", 50, 
"bold"), bg="black", fg="white")
lbl_tss_data.grid(row=2,column=0)

update_data_for_cod_bod()  # Starts periodic calling of itself.
root.mainloop()

Tags: textimportfordatacolumnroottkgrid
1条回答
网友
1楼 · 发布于 2024-05-16 09:51:01

实际上您的代码正在工作,但是canvaslbl_cod_data覆盖,因此您看不到它。尝试将所有.grid(...)更改为.place(...),如下所示:

canvas.place(x=0, y=0)
lbl_cod_data.place(x=50, y=100)
lbl_bod_data.place(x=50, y=200)
lbl_tss_data.place(x=50, y=300)

然后你可以看到标签和画布在一起。在

然而,在画布上使用标签小部件并不是一个好的设计(例如,标签小部件不能有透明的背景)。在

建议改用画布文本。以下是根据您的示例修改的代码:

^{pr2}$

相关问题 更多 >