如何在填充整个单元格时左对齐Python tkinter网格列
我正试图编写一个python类以表格格式显示数据。我确信已经有一些类在做同样的事情,但是,我用这个练习来自学Python和tkinter。在大多数情况下,我让类按照我希望的方式工作,但是我无法让标题和数据单元格填充整个单元格,而将其向左对齐。下面是我的类当前为表生成的内容: 我继续将单元格上的粘性更改为(W,E),而不仅仅是W,以显示我希望表格的外观,除了每个单元格保持对齐。以下是我拍摄的目的: 根据我所做的研究,似乎我需要使用如何在填充整个单元格时左对齐Python tkinter网格列,python,python-3.x,tkinter,grid,Python,Python 3.x,Tkinter,Grid,我正试图编写一个python类以表格格式显示数据。我确信已经有一些类在做同样的事情,但是,我用这个练习来自学Python和tkinter。在大多数情况下,我让类按照我希望的方式工作,但是我无法让标题和数据单元格填充整个单元格,而将其向左对齐。下面是我的类当前为表生成的内容: 我继续将单元格上的粘性更改为(W,E),而不仅仅是W,以显示我希望表格的外观,除了每个单元格保持对齐。以下是我拍摄的目的: 根据我所做的研究,似乎我需要使用grid\u column configure和grid\u r
grid\u column configure
和grid\u row configure
的weight
属性,但是我尝试过的每一种方法都无法使其发挥作用
下面是我的类的代码(我使用的是Python 3.4):
以下是引用TableData类的测试文件:
from tkinter import *
from tkinter import ttk
from tableData import TableData
import sqlite3
root = Tk()
root.geometry('1000x400')
mainframe = ttk.Frame(root).grid(row=0,column=0)
attributes = {}
attributes['tableName'] = 'Title'
attributes['borderColor'] = 'black'
attributes['titleBG'] = '#1975D1'
attributes['titleFG'] = 'white'
attributes['titleFontSize'] = 16
attributes['headerBG'] = 'white'
attributes['headerFG'] = 'black'
attributes['headerFontSize'] = 12
attributes['dataRowColor1'] = 'white'
attributes['dataRowColor2'] = 'grey'
attributes['dataRowFontSize'] = 10
attributes['dataRowFG'] = 'black'
columns = ['Col 1', 'Column 2', 'Column 3','Column 4']
results = [('1','Key','Desc','Attribute'),('2','Key Column','Description Column','AttributeColumn')]
table = TableData(mainframe,attributes,columns,results)
root.mainloop()
提前感谢您提供的任何见解。请告诉我是否有其他有用的信息。尝试设置网格时的
列span
属性:
self.tableDataFrame.grid(row=0, column=0, columnspan=2)
2的大小可能不正确,请尝试,直到获得所需的大小。如果希望标签中的文本左对齐,请使用定位选项。它采用表示指南针上一个点的字符串(例如:“w”=“west”,表示文本定位在左侧):
对于任何几何图形网格,添加选项
sticky=“W”
,例如
self.tableDataFrame.grid(sticky="W", row=0, column=0)
您没有定义标签的宽度,因此tkinter将标签的宽度设置为文本的宽度。这就是为什么标签不会占据单元格的整个宽度。要使它们占据所有可用宽度,请使用stickey=E+W
Label(self.tableDataFrame,text=col,font=tableHeaderFont,bg=self.headerBG,fg=self.headerFG,highlightbackground=self.borderColor,highlightthickness=1).grid(row=1,column=colCount,sticky=W+E, ipady=2, ipadx=5)
我要添加的一件事是,这个类将用于动态创建表。一旦使用,它将是查询的结果集,而不是像我在测试文件中那样向类发送硬编码数据集。因此,我无法对列的宽度或权重进行硬编码。当我运行代码时,我收到此错误:
UnboundLocalError:赋值前引用的局部变量“rowCount”
。您可能希望先解决此问题,然后更新您的问题。无论如何,拉伸列和行的解决方案实际上是将列和/或行的weight
属性设置为1
。我会帮你的,但你需要先给我们一个可运行的程序…@Xenomorph,非常感谢你花时间看这个。我已经添加了rowCount声明,程序现在运行成功。如果你还需要我帮忙,请告诉我。非常感谢。FWIW,weight
选项只影响为行或列提供多少额外空间。它不会以任何方式影响窗口小部件在其单元格中的对齐。@BryanOakley,你知道我缺少了什么,以便使单元格填充整个列,而不使其居中对齐吗?
self.tableDataFrame.grid(sticky="W", row=0, column=0)
Label(self.tableDataFrame,text=col,font=tableHeaderFont,bg=self.headerBG,fg=self.headerFG,highlightbackground=self.borderColor,highlightthickness=1).grid(row=1,column=colCount,sticky=W+E, ipady=2, ipadx=5)