wxpython选择框_wxpython中的多行复选框

像这样的怎么样?弯曲!

(我把它变成了一个单选按钮,以显示它的行为仍然像一个)import wx

import textwrap

class MultilineRadioButton(wx.RadioButton):

def __init__(self, parent, id=-1, label=wx.EmptyString, wrap=10, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, validator=wx.DefaultValidator, name=wx.RadioButtonNameStr):

wx.RadioButton.__init__(self,parent,id,'',pos,size,style,validator,name)

self._label = label

self._wrap = wrap

lines = self._label.split('\n')

self._wrappedLabel = []

for line in lines:

self._wrappedLabel.extend(textwrap.wrap(line,self._wrap))

self._textHOffset = 20

dc = wx.ClientDC(self)

font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)

dc.SetFont(font)

maxWidth = 0

totalHeight = 0

lineHeight = 0

for line in self._wrappedLabel:

width, height = dc.GetTextExtent(line)

maxWidth = max(maxWidth,width)

lineHeight = height

totalHeight += lineHeight

self._textHeight = totalHeight

self.SetInitialSize(wx.Size(self._textHOffset + maxWidth,totalHeight))

self.Bind(wx.EVT_PAINT, self.OnPaint)

def OnPaint(self, event):

dc = wx.PaintDC(self)

self.Draw(dc)

self.RefreshRect(wx.Rect(0,0,self._textHOffset,self.GetSize().height))

event.Skip()

def Draw(self, dc):

dc.Clear()

font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)

dc.SetFont(font)

height = self.GetSize().height

if height > self._textHeight:

offset = height / 2 - self._textHeight / 2

else:

offset = 0

for line in self._wrappedLabel:

width, height = dc.GetTextExtent(line)

dc.DrawText(line,self._textHOffset,offset)

offset += height

class HFrame(wx.Frame):

def __init__(self,pos=wx.DefaultPosition):

wx.Frame.__init__(self,None,title="Hello World",size=wx.Size(600,400),pos=pos)

self.panel = wx.Panel(self,-1)

sizer = wx.BoxSizer(wx.HORIZONTAL)

cb = RadioButton(self.panel,-1,label="This is a very very long label for the control!",wrap=10)

sizer.Add(cb,1)

cb = RadioButton(self.panel,-1,label="This is a very very long label for the control!",wrap=10)

sizer.Add(cb,1)

cb = RadioButton(self.panel,-1,label="This is a very very long label for the control!",wrap=10)

sizer.Add(cb,1)

self.panel.SetSizer(sizer)

sizer.Layout()

class VFrame(wx.Frame):

def __init__(self,pos=wx.DefaultPosition):

wx.Frame.__init__(self,None,title="Hello World",size=wx.Size(600,400),pos=pos)

self.panel = wx.Panel(self,-1)

sizer = wx.BoxSizer(wx.VERTICAL)

cb = RadioButton(self.panel,-1,label="This is a very very long label for the control!",wrap=10)

sizer.Add(cb,1)

cb = RadioButton(self.panel,-1,label="This is a very very long label for the control!",wrap=10)

sizer.Add(cb,1)

cb = RadioButton(self.panel,-1,label="This is a very very long label for the control!",wrap=10)

sizer.Add(cb,1)

self.panel.SetSizer(sizer)

sizer.Layout()

app = wx.App(redirect=False)

htop = HFrame(pos=wx.Point(0,50))

htop.Show()

vtop = VFrame(pos=wx.Point(650,50))

vtop.Show()

app.MainLoop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值