2016-03-21 18 views
1

'da DC rengini düzgün şekilde ayarlamıyor Aşağıdaki koda sahibim ve DC'nin metin rengini değiştirmeye çalışıyorum. İnterneti araştırdım ve bunun için SetTextForeground'un kullanılması gerektiğini gördüm, ancak bir şekilde işe yaramayacağım.wx.SetTextForeground, wxPython

import wx 

class GUI():   
    def __init__(self): 
     self.InitUI() 

    def InitUI(self): 
     self.window = wx.Frame(None, wx.ID_ANY, "Example Title") 

     textList = ['text1', 'text2'] 
     for i in range(len(textList)): 
      bmp = wx.Image('images/step_background.png').Rescale(160, 40).ConvertToBitmap() 
      bmp = self.drawTextOverBitmap(bmp, textList[i]) 
      control = wx.StaticBitmap(self.window, -1, bmp, (0, 30*i+20), size=(160,30)) 
     self.window.Show() 


    def drawTextOverBitmap(self, bitmap, text='', color=(0, 0, 0)): 
      dc = wx.MemoryDC(bitmap) 
      dc.SetTextForeground(color) 
      w,h = dc.GetSize() 
      tw, th = dc.GetTextExtent(text) 
      dc.DrawText(text, (w - tw)/2, (h - th)/2) #display text in center 
      return bitmap 

if __name__ == '__main__': 
    app = wx.App() 
    gui = GUI() 
    app.MainLoop() 

Neyi yanlış yaptığım hakkında bir fikriniz var mı? Herhangi bir fikir için minnettar olurum.

Eğer

+0

Kodunuz benim için çalışıyor. Görüntülerdeki metin1 ve metin2'yi görüntüler. –

+0

Evet, metin iyi görünüyor ancak rengini değiştiremiyorum. Varsayılan olarak siyah olmalıdır (çünkü renk = (0, 0, 0)). –

+0

Peki, sizin için hangi rengi _is_? Siyah her zamanki ön plan rengidir, bu yüzden muhtemelen başka bir şey olabileceğini görmekte çok fazla sorun yaşıyorum ... –

cevap

1

Haklısınız, şeffaflık burada konudur ederiz. Kodunuzu saydam olmayan bir görüntü üzerinde denediniz ve ayarladığınız rengi görüntülemeye gayet iyi çalışıyor. alfa saydamlığı desteklemeyen genel wxDC yöntemlerinde

ve wxColour alfa bileşeni basitçe göz ardı edilir ve tam şeffaflık desteği için wxGraphicsContext kullanmak gerekir:

official docs kimden Alıntı.

Yani böyle bir grafik bağlam oluşturmayı deneyin:

 dc = wx.MemoryDC(bmp) 
     gc = wx.GraphicsContext.Create(dc) 
     font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT) 
     gc.SetFont(font, "Red") 
     w,h = dc.GetSize() 
     tw, th = dc.GetTextExtent(textList[i]) 
     gc.DrawText(textList[i], (w - tw)/2, (h - th)/2) 
+0

Bu aslında işe yaradı! Ben wxWidgets (yanı GUI oluşturma) ile oldukça acemi değilim, bu yüzden Contexts hakkında çok fazla genel bakışım yok. Bana yardım ettiğin için teşekkürler. :-) –

İlgili konular