Мне нужно отобразить таблицы на основе запросов, используя ttk
из tkinter
. Я использовал ttk
Treeview
, чтобы создать верхнюю рамку, содержащую столбцы. Затем нижняя рамка, содержащая три кнопки. Эти три кнопки связаны с тремя функциями, которые отображают различную информацию в зависимости от введенных запросов.
import pymysql
from tkinter import *
from tkinter.ttk import *
#db = pymysql.connect() I erased my info here
cursor = db.cursor()
root = Tk()
frame = Frame(root)
frame.pack()
tree = Treeview(frame)
tree.pack()
def stu_dep():
for row in tree.get_children():
tree.delete(row)
tree["columns"] = ("Name", "DOB", "DepName")
tree.column("#0", width=100)
tree.column("Name", width=100)
tree.column("DOB", width=100)
tree.column("DepName", width=110)
tree.heading("#0", text="Panther ID")
tree.heading("Name", text="Name")
tree.heading("DOB", text="Birth year")
tree.heading("DepName", text="Department Name")
stu_dep_info_quer = "SELECT Student.Panther_ID, Student.Name, Student.DOB, Department.Name FROM Student, Department WHERE Student.Department_ID = Department.Department_ID"
cursor.execute(stu_dep_info_quer)
result = cursor.fetchall()
for i in range(0, len(result)):
tree.insert("", i, text=str(result[i][0]), values=(str(result[i][1]), str(result[i][2]), str(result[i][3]) ))
def inst_info():
for row in tree.get_children():
tree.delete(row)
tree["columns"] = ("Name", "Dep_ID")
tree.column("#0", width=100)
tree.column("Name", width=100)
tree.column("Dep_ID", width=100)
tree.heading("#0", text="Instructor_ID")
tree.heading("Name", text="Name")
tree.heading("Dep_ID", text="Department_ID")
inst_info_quer = "SELECT * FROM Instructor"
cursor.execute(inst_info_quer)
result = cursor.fetchall()
for i in range(0, len(result)):
tree.insert("", i, text=str(result[i][0]), values=(str(result[i][1]), str(result[i][2])))
def stu_info():
for row in tree.get_children():
tree.delete(row)
tree["columns"] = ("Name", "DOB")
tree.column("#0", width=100)
tree.column("Name", width=100)
tree.column("DOB", width=100)
tree.heading("#0", text="Panther ID")
tree.heading("Name", text="Name")
tree.heading("DOB", text="Birth year")
stu_info_quer = "SELECT * FROM Student"
cursor.execute(stu_info_quer)
result = cursor.fetchall()
for i in range(0, len(result)):
tree.insert("", i, text=str(result[i][0]), values=(str(result[i][1]), str(result[i][2])))
bFrame = Frame(root)
bFrame.pack(side = BOTTOM)
stu_dep_button = Button(bFrame, text = "Student_Department", command = stu_dep)
stu_dep_button.grid(row = 0, column = 0)
instructor_button = Button(bFrame, text = "Instructor_Info", command = inst_info)
instructor_button.grid(row = 0, column = 1)
student_button = Button(bFrame, text = "Student_Info", command = stu_info)
student_button.grid(row = 0, column = 2)
stu_info()
root.mainloop()
На следующем снимке экрана показана схема перед нажатием любой кнопки. Окно изначально хорошо вписывается в колонны. Функция stu_info
вызывается в конце программы и отображается без нажатия кнопок.
Но после нажатия любой из кнопок экран больше не идеально подходит для столбцов:
После нажатия некоторых кнопок и возврата информации об ученике теперь справа появляется пустое место.
Q : Как я могу всегда точно устанавливать окна ttk вокруг колонн?