如何解决在 wxPython
我想构建一个用于编辑 mp3 文件的 ID3v2 标签的 UI。我需要一个 StaticText - TextCtrl 列表来编辑不同的标签。我不想单独创建 StaticText 和 TextCtrl,而是想编写一个将它们结合在一起的小部件。 我希望它看起来像这样:
我的第一个想法是扩展一个 BoxSizer 并用一个 StaticText 和一个 TextCtrl 预填充它
import wx
class LabelTextSizer(wx.BoxSizer):
def __init__(self,label):
super().__init__(wx.HORIZONTAL)
self.label = wx.StaticText(self,label=label)
self.text = wx.TextCtrl(self)
self.Add(self.label)
self.Add(self.text)
但它并没有像我期望的那样工作:
Traceback (most recent call last):
File "D:\Tron\repo\rex-song-tagger\main.py",line 58,in <module>
frm = HelloFrame(None,title='Hello World 2')
File "D:\Tron\repo\rex-song-tagger\main.py",line 25,in __init__
sizer = LabelTextSizer('Title')
File "D:\Tron\repo\rex-song-tagger\LabelTextSizer.py",in __init__
self.label = wx.StaticText(self,label=label)
TypeError: StaticText(): arguments did not match any overloaded call:
overload 1: too many arguments
overload 2: argument 1 has unexpected type 'LabelTextSizer'
Process finished with exit code 1
你会怎么做 wx-way?
解决方法
您已使用 LabelTextSizer(一个 sizer)作为 StaticText 和 TextCtrl 小部件的父级,但这必须是 wx.window(例如您的框架或面板),see wxPython docs
这有效:
import wx
class MainFrame(wx.Frame):
def __init__(self,*args,**kwargs):
super().__init__(None,**kwargs)
self.panel = MainPanel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.panel)
self.SetSizer(sizer)
self.Show()
class MainPanel(wx.Panel):
def __init__(self,parent,**kwargs):
super().__init__(parent,**kwargs)
labeltext_1 = LabelTextSizer(self,'Title',size=(300,-1),style=wx.TE_PROCESS_TAB)
labeltext_2 = LabelTextSizer(self,'Artist',style=wx.TE_PROCESS_TAB)
labeltext_3 = LabelTextSizer(self,'Track',style=wx.TE_PROCESS_TAB)
labeltext_1.text.SetHint("TIT2 ...")
labeltext_2.text.SetHint("TPE2 ...")
labeltext_3.text.SetHint("TRCK ...")
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(labeltext_1,wx.ALL,10)
sizer.Add(labeltext_2,10)
sizer.Add(labeltext_3,10)
self.SetSizer(sizer)
class LabelTextSizer(wx.BoxSizer):
def __init__(self,label,size=wx.DefaultSize,style=0):
super().__init__(wx.VERTICAL)
self.label = wx.StaticText(parent,label=label)
self.text = wx.TextCtrl(parent,size=size)
self.Add(self.label)
self.Add(self.text)
if __name__ == '__main__':
wx_app = wx.App()
MainFrame()
wx_app.MainLoop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。