wxPython, 设置StaticText()的值

28 投票
2 回答
47351 浏览
提问于 2025-04-11 21:05

我现在正在用wxPython做一个小的图形界面(GUI)前端。

我使用了wx.StaticText()来创建一个用来显示文本的地方,代码如下:

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

我有一个按钮,点击后可以从MySQL数据库获取数据,我想把StaticText()的内容改成从MySQL获取的数据,或者我还可以用什么来存放这些数据呢。

我尝试了下面的方法:

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

这个方法可以正常显示数据,但加载数据后,用户可以编辑这些内容,而我并不想让他们这样做。

希望大家能理解我想做的事情,我对Python还很陌生 :)

谢谢大家

2 个回答

64

如果你在使用 wx.StaticText(),你只需要这样做:

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
    self.some_text.SetLabel(mysql_data)

正如litb提到的,wxWidgets的文档通常比wxPython的文档更容易使用。为了看到SetLabel()这个函数可以用在wx.StaticText实例上,你需要在wxPython的文档中向上查找,找到wxWindow这个父类,因为wx.StaticText是从这个父类派生出来的。wxPython和wxWidgets之间有一些不同之处,找出这些不同可能会有点困难。不过幸运的是,很多时候,这些不同之处是wxPython添加的一些方便功能,而在wxWidgets中是找不到的。

24

wx.TextCtrl 有一个叫做 wx.TE_READONLY 的样式。用这个样式可以让它变成只读的。

顺便提一下,你也可以参考 C++ wxWidgets 手册 来了解 wxPython。在需要特别处理 wxPython 或其他版本的地方,手册通常会指出这些不同之处。

撰写回答