На основе этого ответа о том, как настроить конфигурацию вкладки ноутбука, вы можете добавить информацию о шрифте в созданную тему, например, чтобы получить нужный тип шрифтов:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
s = ttk.Style()
s.theme_create( "MyStyle", parent="alt", settings={
"TNotebook": {"configure": {"tabmargins": [2, 5, 2, 0] } },
"TNotebook.Tab": {"configure": {"padding": [100, 10],
"font" : ('URW Gothic L', '11', 'bold')},}})
s.theme_use("MyStyle")
notebook = ttk.Notebook(root)
f1 = tk.Frame(notebook, bg='red', width=200, height=200)
f2 = tk.Frame(notebook, bg='blue', width=200, height=200)
notebook.add(f1, text="frame 1" )
notebook.add(f2, text="frame 2 longer" )
notebook.grid(row=0, column=0, sticky="nw")
root.mainloop()
[ 117] Другой подход заключается в прямой настройке стиля вкладок в блокноте. Смотрите ниже код.
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
s = ttk.Style()
s.configure('TNotebook.Tab', font=('URW Gothic L','11','bold') )
notebook = ttk.Notebook(root)
f1 = tk.Frame(notebook, bg='red', width=200, height=200)
f2 = tk.Frame(notebook, bg='blue', width=200, height=200)
notebook.add(f1, text="frame 1" )
notebook.add(f2, text="frame 2 longer" )
notebook.grid(row=0, column=0, sticky="nw")
root.mainloop()
Вы должны заметить разницу между использованием s.configure('TNotebook.Tab', font=('URW Gothic L','11','bold') )
и s.configure('TNotebook', font=('URW Gothic L','11','bold') )
. Первый изменяет шрифт виджета «Вкладка», а второй - шрифт.
Вы используете первый подход, если настраиваете много аспектов вкладки. Вы используете второй подход, если хотите просто изменить шрифт на вкладке «Блокнот».
Использование s.configure('.', font=('URW Gothic L','11','bold') )
означает, что шрифт всех виджетов ttk будет одного типа. Сделайте это, если вы этого хотите.
При добавлении requirePermission ='false' атрибут в configsections app.config помогает много:
<sectionGroup name="system.net" type="System.Net.Configuration.NetSectionGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section requirePermission="false" name="defaultProxy" type="System.Net.Configuration.DefaultProxySection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</sectionGroup>
Это сделало прием для меня!
Microsoft имеет инструмент, названный permcalc, которые анализируют блок, и производит подробный xml выходной файл, который похож на это:
<Type Name="MyClass">
<Method Sig="instance void .ctor()">
<Demand>
<PermissionSet version="1" class="System.Security.PermissionSet">
<IPermission version="1" class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Unrestricted="true" />
<IPermission version="1" class="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Unrestricted="true" />
...
Сообщение об исключении говорит Вам, почему Вы не можете работать с частичным доверием:
System.Security.Permissions.SecurityAction.LinkDemand
Если Вы скопируете и вставите это в Google, то Вы найдете несколько соответствующих статей о MSDN, который мог бы помочь Вам обнаружить, почему Ваше приложение требует полного доверия.
Кажется, что моя проблема вызывается тем, что мой блок сильно подписывается.
Заключенный в кавычки из MSDN
В сборках со строгим именем LinkDemand применяется ко всем публично доступным методам, свойствам и событиям там для ограничения их использования полностью доверяемыми вызывающими сторонами. Для отключения этой опции необходимо применить AllowPartiallyTrustedCallersAttributeattribute.
Я добавляю необходимый атрибут к своему блоку, и я сообщу, как вещи складываются:
[assembly:AllowPartiallyTrustedCallers]
Обновление: я добавил атрибут к своим блокам, но я также использую некоторые блоки .NET.
Не все блоки .NET могут использоваться частично доверяемыми блоками (вот список), а именно, блоки WCF (т.е. Система. ServiceModel), не находится в списке
Однако Microsoft заявляет, что возможно использовать WCF в частичной доверительной среде (см. здесь),
Я попытался удалить все ненужные блоки из своих ссылок, я использовал AllowPartiallyTrustedCallers во всех своих блоках, и я все еще stucked...
Hrm, просто предположение, но это убегает сетевого ресурса?.NET, кажется, присваивает доверие на основе местоположения, от которого выполняется код. Если это откуда-либо, но Ваш локальный жесткий диск затем Вы собираетесь иметь проблемы безопасности.
Не видя код для Вашего приложения, невозможно сказать. Существует что-то, что требует полного доверия Вашему приложению, которое Вы, возможно, пропустили (возможно, зависимость?).
Ваше отслеживание стека не показывает тип потребованного разрешения.
AllowPartiallyTrustedCallers не поможет Вам в этом случае. Это должно быть указано на цели вызова, например, когда некоторый частично доверяемый код звонит в Ваш доверяемый блок. В Вашей ситуации необходимо исследовать, звонит ли приложение в блоки, которым не определили этот атрибут. Если да затем Ваше приложение должно будет работать в полном доверии и не будет работать в частичном доверии вообще (это - то, как CAS осуществляется и дизайном.)
Иначе используйте permcalc. Это покажет Вам полномочия, которые должны затем быть включены в настройках безопасности проекта. Однако я не уверен, будет ли после включая весь тот перманент у Вас все еще "частичное доверительное" или довольно полное доверие с несколькими упрощенными полномочиями. Это - то, вследствие того, что частичное доверие очень строго (откройте security.config и посмотрите на включенные полномочия!), насколько я знаю, WebPermission не там (который необходим для отправки запросов HTTP), то же с FileIOPermission.