class Container(Shape):
v_app: Application
def __init__(self, caption: str, items: list, header_fill: str=None, font: Font=None) -> None:
# select items for container:
window = self.v_app.app.ActiveWindow
selection = window.Selection; selection.DeselectAll()
for item in items:
selection.Select(item.shape, 2) # visSelect = 2
# drop and format container:
self.shape = self.v_app.page.DropContainer(self.v_app.doc.Masters.ItemU("Classic"), selection)
super().__init__(self.shape)
self.shape.Text = caption
if font:
self.set_font(font)
else:
self.set_font(self.v_app.font4)
if header_fill:
self.shape.Cells("FillForegnd").FormulaForceU = header_fill
self.shape.ContainerProperties.FitToContents()
Полученное значение таблицы фигур выглядит правильно:

Однако заливка заголовка не меняется с белого цвета по умолчанию. Если я использую графический интерфейс Visio, я могу успешно обновить цвет заливки.
[img]https://i.sstatic.net /f3bKGj6t.png[/img]
Я создал отдельную программу, чтобы изолировать проблему от моей базы кода:
import win32com.client as w32
app = w32.Dispatch("Visio.Application")
app.Window.SetWindowRect(10, 10, 2000, 1000)
doc = app.Documents.Open(r"C:\Users\hankb\OneDrive\Documents\Python\projects\visio_test\junk.vsdx")
# doc = app.Documents.Add("junk.vsdx")
page = doc.Pages.Add()
b1 = page.DrawRectangle(1, 5, 2, 4.5); b1.Text = "Box 1"
b2 = page.DrawRectangle(1, 4, 2, 3.5); b2.Text = "Box 2"
win = app.ActiveWindow
sel = win.Selection
sel.Select(b1, 2)
sel.Select(b2, 2)
con = page.DropContainer(doc.Masters.ItemU("Classic"), sel)
con.Cells("FillForegnd").FormulaForceU = "RGB(189, 215, 238)" # RGB(0,255,0)"
con.Text = "Container"
pass
Выход короткой программы:

Приведенный ниже код решил мою проблему:
con = page.DropContainer(stencil.Masters.ItemU("Classic"), sel)
con_header = con.Shapes[1]
con_header.Cells("FillForegnd").FormulaForceU = "RGB(189, 215, 238)"
con.Text = "Container"
Подробнее здесь: https://stackoverflow.com/questions/787 ... ing-effect