标签印刷

2024-04-20 14:06:29 发布

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

与postgresqldb建立连接时,我想在标签中显示一个手工制作的表,在我的DB上进行选择。数据库连接和查询都可以。但出了点问题。我把下面的源代码和程序显示的屏幕截图。你知道吗

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:

enter image description here


Tags: thetoimportdbpostgresqlconnectrootpsycopg2
1条回答
网友
1楼 · 发布于 2024-04-20 14:06:29

这里发生的是你用每一行覆盖v。相反,可以考虑编写一个多行字符串,然后将最终值设置为v。你知道吗

也就是说,你还可以尝试其他一些选择。例如,您可以使用一个文本框,然后在新行的末尾加上insert(),这样就可以了。或者在处理数据集时,最好使用树状视图来组织数据。你知道吗

试试这个,如果你有任何问题请告诉我:

替换此项:

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('+  +              -+          +              -+                  -+')

有了这个:

separator = '+  +              -+          +              -+              -+'
prep_string = ''''''

prep_string = '{}{}\n'.format(prep_string, separator)
prep_string = '{}{}\n'.format('|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da     Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|')
prep_string = '{}{}\n'.format(prep_string, separator)
for r in rows:
    prep_string = '{}{}\n'.format(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) + '|')
prep_string = '{}{}\n'.format(prep_string, separator)

v.set(prep_string)

如果我们打印prep_string的值,我们就可以立即得到您试图添加的全部内容。请注意,下面我只是将您的变量引用到一个字符串中,以显示它是如何工作的。你的值应该代表你所有的数据。你知道吗

+  +              -+          +              -+              -+
|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da     Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|
+  +              -+          +              -+              -+
|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da     Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|
|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da     Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|
|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da     Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|
+  +              -+          +              -+              -+

对于文本小部件版本,请尝试以下操作:

import tkinter as tk

separator = '+  +              -+          +              -+              -+'

root = tk.Tk()
text = tk.Text(root, wrap='none', font='TkFixedFont', width=130)
text.pack()

text.insert('end', separator + '\n')
text.insert('end', '''|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da     Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|''' + '\n')
text.insert('end', separator + '\n')
for r in range(3):
    text.insert('end', '''|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da     Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|''' + '\n')
text.insert('end', separator + '\n')

root.mainloop()

结果:

enter image description here

相关问题 更多 >