I am making a little GUI frontend for a app at the moment using wxPython.

I am using wx.StaticText() to create a place to hold some text, code below:

content = wx.StaticText(panel, -1, "Text Here", style=wx.ALIGN_CENTRE)

I have a button when clicked retrieves data from MySQL, I am wanting to change the value of the StaticText() to the MySQL data or what else could I use the hold the data.

I have tried using the below method:

contents = wx.TextCtrl(bkg, style=wx.TE_MULTILINE | wx.HSCROLL)
content.SetValue("New Text")

This displays the data fine but after the data is loaded you can edit the data and I do not want this.

Hope you guys understand what I am trying to do, I am new to Python 🙂


If you are using a wx.StaticText() you can just:

def __init__(self, parent, *args, **kwargs): #frame constructor, etc.
    self.some_text = wx.StaticText(panel, wx.ID_ANY, label="Awaiting MySQL Data", style=wx.ALIGN_CENTER)

def someFunction(self):
    mysql_data = databasemodel.returnData() #query your database to return a string

As litb mentioned, the wxWidgets docs are often much easier to use than the wxPython docs. In order to see that the SetLabel() function can be applied to a wx.StaticText instance, you have to travel up the namespace hierarchy in the wxPython docs to the wxWindow superclass, from which wx.StaticText is subclassed. There are a few things different in wxPython from wxWidgets, and it can be challenging to find out what they are. Fortunately, a lot of the time, the differences are convenience functions that have been added to wxPython and are not found in wxWidgets.

wx.TextCtrl has a style called wx.TE_READONLY . Use that to make it read-only.

As a sidenode, you can use the C++ wxWidgets Manual for wxPython aswell. Where special handling for wxPython or other ports is required, the manual often points out the difference.