自定义Tkinter网格放置

问题描述 投票:0回答:1

我正在尝试使用 customtkinter 显示 MySQL 数据库的内容,但表的位置与我在网格中分配的位置不匹配。我对 GUI 编程还很陌生,所以我希望得到你的帮助。这是我的代码:

import customtkinter 
import mysql.connector
import pandas as pd
from pandastable import Table, TableModel

conn = mysql.connector.connect(user='root', password='0000', host='localhost', database='python', auth_plugin='mysql_native_password')
cursor = conn.cursor()

class MyFrame(customtkinter.CTkFrame):
    def __init__(self, master):
        super().__init__(master)
        self.header = customtkinter.CTkLabel(self, text="Dashboard", fg_color="transparent", font=("Product Sans",48))
        self.header.grid(row=0, column=0, sticky="w")
        command = "select * from fruits"
        table_width = 310
        table_height = 100
        df = pd.read_sql_query(command, conn)
        pt = Table(self, dataframe=df, width=table_width, height=table_height, showtoolbar=False, showstatusbar=False, showRowNumber=False)
        pt.grid(row=310, column=0)
        pt.show()
        pt.hideRowHeader()

class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()

        self.title("my app")
        self.geometry("1280x720")
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

        self.frame = MyFrame(self)
        self.frame.grid(row=0, column=0, sticky='nw')
        self.frame.configure(width=1280, height=720)

        self.button = customtkinter.CTkButton(self, text="my button")
        self.button.grid(row=3, column=0, padx=10, pady=10, sticky="ew")

app = App()
app.mainloop()

这是输出: Output

我希望表格位于标题“仪表板”下方,但它附着在侧面,并且滚动条也不断出现故障。

python-3.x tkinter mysql-connector customtkinter pandastable
1个回答
1
投票

请注意,

pandastable.Table
有不同的部分,它们被放置在相同的父框架中(
self
,您的案例的
MyFrame
的实例)。 其中一个部分
rowindexheader
位于第 0 行第 0 列(与标签“Dashboard”相同的位置)。 但它是通过在代码中调用
pt.hideRowHeader()
来隐藏的,因此您可以看到标签“Dashboard”。 如果删除行
pt.hideRowHeader()
,标签“Dashboard”将被 行标题覆盖。

您可以将标签“Dashboard”移出

MyFrame
类,并在
MyFrame
实例的同一父级中创建它。

下面是一个基于您的简化示例:

import customtkinter as ctk
from pandastable import Table

ctk.set_appearance_mode("dark")

class MyFrame(ctk.CTkFrame):
    def __init__(self, master):
        super().__init__(master)

        table_width = 310
        table_height = 100
        pt = Table(self, width=table_width, height=table_height,
                   showtoolbar=False, showstatusbar=False, showRowNumber=False)
        pt.show()
        pt.hideRowHeader()

root = ctk.CTk()
root.geometry("400x300")

header = ctk.CTkLabel(root, text="Dashboard", fg_color="transparent",
                      font=("Product Sans", 48))
header.pack()

frame = MyFrame(root)
frame.pack(fill="both", expand=1)

root.mainloop()

输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.