Я объединил полосу прокрутки с ноутбуком ttk, адаптировав это example и дополнительно портируя его на Python3.получить фон по умолчанию ttk.Frame
Я использую виджеты ttk как можно чаще, чтобы получить более «современный» интерфейс. Тем не менее, нет виджета ttk canvas, поэтому я использовал стандартный холст tkinter. По умолчанию фоновый рисунок виджета canvas выглядит белым (по крайней мере, в Mac OS), а фон по умолчанию для всех виджетов ttk - серый (см. Снимок экрана ниже).
Как я могу получить фон по умолчанию из фрейма ttk, содержащего виджеты ярлыков, чтобы передать его на холст на Canvas(parent, background='bg_color')
и удалить пустое пространство вокруг рамки ttk, содержащей метки ttk?
Я знаю, что ttk использует styles
, чтобы определить внешний вид виджетов. Однако я понятия не имею, как читать фоновое значение стиля (по умолчанию).
#!/usr/bin/env python3
# coding: utf-8
from tkinter import *
from tkinter import ttk
master = Tk()
def populate():
"""Put in some fake data"""
for row in range(100):
ttk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0)
t="this is the second column for row %s" % row
ttk.Label(frame, text=t).grid(row=row, column=1)
def OnFrameConfigure(event):
"""Reset the scroll region to encompass the inner frame"""
canvas.configure(scrollregion=canvas.bbox("all"))
nbook = ttk.Notebook(master)
nbook.grid()
tab = Frame(nbook)
canvas = Canvas(tab, borderwidth=0)
frame = ttk.Frame(canvas)
vsb = Scrollbar(tab, orient="vertical", command=canvas.yview)
canvas.configure(yscrollcommand=vsb.set)
vsb.pack(side="right", fill="y")
canvas.pack(side='left', fill='both', expand=True)
canvas.create_window((0, 0), window=frame, anchor='nw', tags='frame')
frame.bind("<Configure>", OnFrameConfigure)
populate()
nbook.add(tab, text='Test')
master.mainloop()
В общем, это объясняет, как получить настройки данного стиля, который в основном решает половина моего вопроса. Однако после передачи фона на холст ничего не изменилось (по крайней мере, на Mac). При тестировании одного и того же кода в Windows выяснилось, что фон имеет правильный цвет автоматически (без передачи его из style.lookup). Я думаю, что странное поведение Mac OS Tkinter связано с некоторыми недостатками Tk на Mac, потому что я использую версию Tkinter по умолчанию, а не рекомендованную версию ActiveTcl, но я не доказал этого ... – albert
У меня только Windows PC, поэтому я боюсь, что не могу помочь вам в решении любых проблем, связанных с Mac OS, поскольку я не могу их воспроизвести. Вы проверили, что 'bg' содержит цвет, который вы ожидали? – fhdrsdg
Я ожидал, что по умолчанию Mac серый (не знаю, как это называется). Однако 'print (bg)' возвращает 'systemWindowBody'. – albert