表格¶
表API是可用于创建表的低级API。
它还可以用作布局机构。表格由多个组件组成,包括列、行、单元格和要显示的实际项。了解该表的各种配置选项的最佳途径是运行演示!
以下是创建表的最小示例
Code
import dearpygui.dearpygui as dpg
dpg.create_context()
with dpg.window(label="Tutorial"):
with dpg.table(header_row=False):
# use add_table_column to add columns to the table,
# table columns use child slot 0
dpg.add_table_column()
dpg.add_table_column()
dpg.add_table_column()
# add_table_next_column will jump to the next row
# once it reaches the end of the columns
# table next column use slot 1
for i in range(0, 4):
with dpg.table_row():
for j in range(0, 3):
dpg.add_text(f"Row{i} Column{j}")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
备注
最大列数为64。
通过创建单元格,可以将多个项目放入单个单元格,如下所示
Code
import dearpygui.dearpygui as dpg
dpg.create_context()
with dpg.window(label="Tutorial"):
with dpg.table(header_row=False, resizable=True, policy=dpg.mvTable_SizingStretchProp,
borders_outerH=True, borders_innerV=True, borders_innerH=True, borders_outerV=True):
dpg.add_table_column(label="Header 1")
dpg.add_table_column(label="Header 2")
dpg.add_table_column(label="Header 3")
# once it reaches the end of the columns
for i in range(0, 4):
with dpg.table_row():
for j in range(0, 3):
with dpg.table_cell():
dpg.add_button(label=f"Row{i} Column{j} a")
dpg.add_button(label=f"Row{i} Column{j} b")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
边框,背景¶
属性可以控制表的边框。 borders_innerH , borders_innerV , borders_outerH ,以及 borders_outerV 关键字。属性启用交替行颜色。 row_background 关键字。
Code
import dearpygui.dearpygui as dpg
dpg.create_context()
with dpg.window(label="Tutorial"):
with dpg.table(header_row=False, row_background=True,
borders_innerH=True, borders_outerH=True, borders_innerV=True,
borders_outerV=True):
# use add_table_column to add columns to the table,
# table columns use child slot 0
dpg.add_table_column()
dpg.add_table_column()
dpg.add_table_column()
# add_table_next_column will jump to the next row
# once it reaches the end of the columns
# table next column use slot 1
for i in range(0, 4):
with dpg.table_row():
for j in range(0, 3):
dpg.add_text(f"Row{i} Column{j}")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
列标题¶
列标题只是通过设置 header_row 至 True 设置列的标签。
Code
import dearpygui.dearpygui as dpg
dpg.create_context()
with dpg.window(label="Tutorial"):
with dpg.table(header_row=True):
# use add_table_column to add columns to the table,
# table columns use slot 0
dpg.add_table_column(label="Header 1")
dpg.add_table_column(label="Header 2")
dpg.add_table_column(label="Header 3")
# add_table_next_column will jump to the next row
# once it reaches the end of the columns
# table next column use slot 1
for i in range(0, 4):
with dpg.table_row():
for j in range(0, 3):
dpg.add_text(f"Row{i} Column{j}")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
调整大小¶
为了使表具有可调整大小的列, resizable 和 borders_innerV 关键字必须设置为 True 。
您还可以设置大小调整策略关键字, policy ,使用以下选项
- 政策:
mvTable_SizingFixedFitmvTable_SizingFixedSamemvTable_SizingStretchPropmvTable_SizingStretchSame
伸长¶
以下是为整个表设置拉伸策略的示例
import dearpygui.dearpygui as dpg
dpg.create_context()
with dpg.window(label="Tutorial"):
with dpg.table(header_row=False, resizable=True, policy=dpg.mvTable_SizingStretchProp,
borders_outerH=True, borders_innerV=True, borders_outerV=True):
dpg.add_table_column(label="Header 1")
dpg.add_table_column(label="Header 2")
dpg.add_table_column(label="Header 3")
# add_table_next_column will jump to the next row
# once it reaches the end of the columns
# table next column use slot 1
for i in range(0, 4):
with dpg.table_row():
for j in range(0, 3):
dpg.add_text(f"Row{i} Column{j}")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
Fixed
下面是为整个表设置固定配合策略的示例
import dearpygui.dearpygui as dpg
dpg.create_context()
with dpg.window(label="Tutorial"):
# Only available if scrollX/scrollY are disabled and stretch columns are not used
with dpg.table(header_row=False, policy=dpg.mvTable_SizingFixedFit, resizable=True, no_host_extendX=True,
borders_innerV=True, borders_outerV=True, borders_outerH=True):
dpg.add_table_column(label="Header 1")
dpg.add_table_column(label="Header 2")
dpg.add_table_column(label="Header 3")
for i in range(0, 4):
with dpg.table_row():
for j in range(0, 3):
dpg.add_button(label=f"Row{i} Column{j} a")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
Mixed
您还可以通过使用 width_fixed 或 width_stretch 关键字以及 init_width_or_weight 关键字。
import dearpygui.dearpygui as dpg
dpg.create_context()
with dpg.window(label="Tutorial"):
with dpg.table(header_row=True, policy=dpg.mvTable_SizingFixedFit, row_background=True, reorderable=True,
resizable=True, no_host_extendX=False, hideable=True,
borders_innerV=True, delay_search=True, borders_outerV=True, borders_innerH=True,
borders_outerH=True):
dpg.add_table_column(label="AAA", width_fixed=True)
dpg.add_table_column(label="BBB", width_fixed=True)
dpg.add_table_column(label="CCC", width_stretch=True, init_width_or_weight=0.0)
dpg.add_table_column(label="DDD", width_stretch=True, init_width_or_weight=0.0)
for i in range(0, 5):
with dpg.table_row():
for j in range(0, 4):
if j == 2 or j == 3:
dpg.add_text(f"Stretch {i},{j}")
else:
dpg.add_text(f"Fixed {i}, {j}")
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
列选项¶
有大量可用于表列的选项,这些选项是通过运行演示了解得最好的,包括
关键字 |
缺省值 |
描述 |
---|---|---|
init_width_or_weight |
0.0 |
设置列的起始宽度(固定策略)或比例(拉伸)。 |
default_hide |
错误 |
默认为隐藏/禁用列。 |
default_sort |
错误 |
默认为排序列。 |
width_stretch |
错误 |
柱子将伸展。最好禁用水平滚动(如果表格大小调整策略为_SizingStretchSame或_SizingStretchProp,则为默认设置)。 |
width_fixed |
错误 |
柱不会拉伸。最好启用水平滚动(如果表格大小调整策略为_SizingFixedFit并且表格可调整大小,则默认设置)。 |
no_resize |
错误 |
禁用手动调整大小。 |
no_reorder |
错误 |
禁用手动重新排序此列,这也将防止其他列与此列交叉。 |
no_hide |
错误 |
禁用隐藏/禁用此列的功能。 |
no_clip |
错误 |
禁用此列的剪裁。 |
no_sort |
错误 |
禁用此列的排序。 |
no_sort_ascending |
错误 |
禁用按升序排序的功能。 |
no_sort_descending |
错误 |
禁用按降序排序的功能。 |
no_header_width |
错误 |
禁用页眉文本宽度对自动列宽的影响。 |
prefer_sort_ascending |
真的 |
在此列上首次排序时将初始排序方向设置为升序(默认)。 |
prefer_sort_descending |
错误 |
在此列上首次排序时,将初始排序方向设置为降序。 |
indent_enabled |
错误 |
输入单元格时使用当前缩进值(第0列默认)。 |
indent_disable |
错误 |
输入单元格时忽略当前缩进值(列>0时为默认值)。缩进更改 _within_ 该组织仍将受到尊敬。 |
分选¶
DPG实际上不会为您执行任何排序。表API是一个更通用的API,它由库用户来处理排序。要根据用户交互对表进行排序,必须为该表分配回调。当用户尝试通过单击表的列标题对表进行排序时,将运行此回调。
import dearpygui.dearpygui as dpg
dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()
def sort_callback(sender, sort_specs):
# sort_specs scenarios:
# 1. no sorting -> sort_specs == None
# 2. single sorting -> sort_specs == [[column_id, direction]]
# 3. multi sorting -> sort_specs == [[column_id, direction], [column_id, direction], ...]
#
# notes:
# 1. direction is ascending if == 1
# 2. direction is ascending if == -1
# no sorting case
if sort_specs is None: return
rows = dpg.get_item_children(sender, 1)
# create a list that can be sorted based on first cell
# value, keeping track of row and value used to sort
sortable_list = []
for row in rows:
first_cell = dpg.get_item_children(row, 1)[0]
sortable_list.append([row, dpg.get_value(first_cell)])
def _sorter(e):
return e[1]
sortable_list.sort(key=_sorter, reverse=sort_specs[0][1] < 0)
# create list of just sorted row ids
new_order = []
for pair in sortable_list:
new_order.append(pair[0])
dpg.reorder_items(sender, 1, new_order)
with dpg.window(label="Tutorial", width=500):
with dpg.table(header_row=True, borders_innerH=True, borders_outerH=True,
borders_innerV=True, borders_outerV=True, row_background=True,
sortable=True, callback=sort_callback):
dpg.add_table_column(label="One")
dpg.add_table_column(label="Two", no_sort=True)
for i in range(25):
with dpg.table_row():
dpg.add_input_int(label=" ", step=0, default_value=i)
dpg.add_text(f"Cell {i}, 1")
# main loop
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
滚动¶
在建工程
选择¶
您可以通过将 selectable 添加到表中并为其分配回调。使用主题来控制悬停样式。这个 span_columns 选项中的 selectable 用于控制行或单元格是否可选。
import dearpygui.dearpygui as dpg
dpg.create_context()
with dpg.theme() as table_theme:
with dpg.theme_component(dpg.mvTable):
# dpg.add_theme_color(dpg.mvThemeCol_HeaderHovered, (255, 0, 0, 100), category=dpg.mvThemeCat_Core)
dpg.add_theme_color(dpg.mvThemeCol_HeaderActive, (0, 0, 0, 0), category=dpg.mvThemeCat_Core)
dpg.add_theme_color(dpg.mvThemeCol_Header, (0, 0, 0, 0), category=dpg.mvThemeCat_Core)
def clb_selectable(sender, app_data, user_data):
print(f"Row {user_data}")
with dpg.window(tag="Selectable Tables"):
with dpg.table(tag="SelectRows", header_row=True) as selectablerows:
dpg.add_table_column(label="First")
dpg.add_table_column(label="Second")
dpg.add_table_column(label="Third")
for i in range(15):
with dpg.table_row():
for j in range(3):
dpg.add_selectable(label=f"Row{i} Column{j}", span_columns=True, callback=clb_selectable, user_data=i)
dpg.bind_item_theme(selectablerows, table_theme)
with dpg.table(tag="SelectCells", header_row=True) as selectablecells:
dpg.add_table_column(label="First")
dpg.add_table_column(label="Second")
dpg.add_table_column(label="Third")
for i in range(15):
with dpg.table_row():
for j in range(3):
dpg.add_selectable(label=f"Row{i} Column{j}", callback=clb_selectable, user_data=(i,j))
dpg.bind_item_theme(selectablecells, table_theme)
dpg.create_viewport(width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
裁剪¶
使用剪刀可以帮助提高处理大型表格的性能。
试着使用下面的例子,带和不带剪裁,看看对指标中列出的帧速率的影响。
import dearpygui.dearpygui as dpg
dpg.create_context()
def clipper_toggle(sender):
dpg.configure_item("table_clip", clipper=dpg.get_value(sender))
with dpg.window(label="Tutorial"):
dpg.add_checkbox(label="clipper", callback=clipper_toggle, default_value=True)
with dpg.table(header_row=False, tag="table_clip", clipper=True):
for i in range(5):
dpg.add_table_column()
for i in range(30000):
with dpg.table_row():
for j in range(5):
dpg.add_text(f"Row{i} Column{j}")
dpg.show_metrics()
dpg.create_viewport(title='Custom Title', width=800, height=600)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
过滤¶
在建工程
填充物¶
在建工程
外部尺寸¶
在建工程
列宽¶
在建工程
行高¶
在建工程
搜索延迟¶
在建工程