【发布时间】:2019-10-22 17:40:48
【问题描述】:
与 PostgreSQL 数据库建立连接,我想在标签中显示一个手工制作的表格,在我的数据库上进行选择。数据库连接和查询都没问题。但是出了点问题。我把程序显示的源代码和屏幕截图放在下面。
from tkinter import *
import psycopg2 # LIBRARY FOR CONNECT TO THE POSTGRESQL DB
root = Tk()
menubar = Menu(root)
file = Menu(menubar, tearoff=0)
file.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="Principal", menu=file)
con = psycopg2.connect( # CONNECT TO THE POSTGRESQL DB
host="localhost",
database="escola",
user="postgres",
password=248657
)
v = StringVar()
cur = con.cursor() # CURSOR
cur.execute("SELECT id, nome, dt_nasc, nome_mae, nome_pai FROM alunos") # EXECUTE QUERY
rows = cur.fetchall()
v.set('+----+-----------------------------+--------------------+-----------------------------+-----------------------------+')
v.set('|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|')
v.set('+----+-----------------------------+--------------------+-----------------------------+------ -----------------------+')
for r in rows:
v.set(f'|{r[0]}'.ljust(5) + f'| {r[1]}'.ljust(30) + f'| {r[2]}'.ljust(21) + f'| {r[3]}'.ljust(30) + f'| {r[4]}'.ljust(30) + '|')
v.set('+----+-----------------------------+--------------------+-----------------------------+------ -----------------------+')
cur.close() # CLOSE CURSOR
box = Label(root, textvariable=v).pack() # THE LABEL
root.config(menu=menubar) # SETTING THE MENU
root.mainloop()
ScreeShot:
【问题讨论】:
-
不管发生什么事,你最后都将
v设置为+----+-----...。所以结果总是一样的。 -
我认为您正在尝试将值附加到
v,但您真正要做的是每次调用v.set()时都覆盖v -
标签是多行数据的错误选择。您是否考虑过使用专为多行文本设计的
Text小部件?
标签: python postgresql tkinter label psycopg2