تطبيق نظام الخط المشترك إلى كائنات متعددة في كسبيثون
سؤال
ومرات عديدة وسوف تستخدم نظام الخط نفسه لنص ثابت في تطبيق كسبيثون. حاليا أنا إجراء مكالمة SetFont()
لكل كائن نص ثابت ولكن يبدو أن الكثير من العمل لا لزوم له. ومع ذلك، التجريبي كسبيثون وكسبيثون في كتابه العمل لا تناقش هذا.
هل هناك طريقة لتطبيق بسهولة نفس الأسلوب SetFont()
لجميع هذه الكائنات النص دون إجراء مكالمات منفصلة في كل مرة؟
المحلول
ويمكنك القيام بذلك عن طريق استدعاء SetFont على الإطار الأصل (الإطار، حوار، الخ) قبل أن يضيف أي الحاجيات. فإن الحاجيات الطفل يرث الخط.
نصائح أخرى
وربما محاولة شاء subclasses ترث كائن النص وطريقة __init__
صفك مجرد دعوة SetFont ()؟
وأو تفعل شيئا مثل:
def f(C):
x = C()
x.SetFont(font) # where font is defined somewhere else
return x
وبعد ذلك فقط تزيين كل كائن النص الذي خلق مع معها:
text = f(wx.StaticText)
(وبطبيعة الحال، إذا StaticText
منشئ يتطلب بعض المعلمات، وسوف تحتاج إلى تغيير الأسطر الأولى في تعريف الدالة f
).
إذا تم بالفعل خلق كل الحاجيات، يمكنك تطبيق SetFont
بشكل متكرر، على سبيل المثال مع وظيفة التالية:
def changeFontInChildren(win, font):
'''
Set font in given window and all its descendants.
@type win: L{wx.Window}
@type font: L{wx.Font}
'''
try:
win.SetFont(font)
except:
pass # don't require all objects to support SetFont
for child in win.GetChildren():
changeFontInChildren(child, font)
وهناك استخدام المثال أن يسبب كل نص في frame
لتصبح الخط الافتراضي مع نمط مائل:
newFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
newFont.SetStyle(wx.FONTSTYLE_ITALIC)
changeFontInChildren(frame, newFont)
والحل المذكورة أعلاه من قبلDzinX عملت لي عند تغيير الخط بشكل حيوي في الفريق أن لديها بالفعل الأطفال والتي تظهر بالفعل.
وانتهى بي الأمر تعديله على النحو التالي لأن الأصل أعطاني مشكلة في الحالات الزاوية (أي عند استخدام AuiManager
مع إطارات العائمة).
def change_font_in_children(win, font):
'''
Set font in given window and all its descendants.
@type win: L{wx.Window}
@type font: L{wx.Font}
'''
for child in win.GetChildren():
change_font_in_children(child, font)
try:
win.SetFont(font)
win.Update()
except:
pass # don't require all objects to support SetFont