You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

wxPython中SpinCtrlDouble控件浮点数显示异常问题求助

wxPython SpinCtrlDouble 小数位数大于2时显示异常问题

使用wxPython开发仪器控制GUI,在搭建字段与控件时,用SpinCtrlDouble控件定义需至少保留3位小数的频率和振幅。发现当调用SetDigits()设置小数位数大于2时,控件内的浮点数显示异常:文本被选中且偏移,无法查看前几位数字(例如应显示21.62100,但看不到“21”)。已尝试用wx.TE_RIGHT设置文本对齐、扩大控件跨度,问题仍未解决。

运行环境

  • 操作系统:Win10
  • Python版本:3.11.5、3.9.21、3.13.4
  • wxPython版本:4.2.3
  • IDE:VS Code

问题代码

import wx

class Mywin(wx.Frame): 
    def __init__(self): 
        wx.Frame.__init__(self, None, title = 'Hello')
        # main panel window
        panel = wx.Panel(self)        
        # main vbox
        vbox = wx.BoxSizer(wx.VERTICAL)
        # vbox.SetMinSize(self,(600,800))

        # StaticBoxSizer for Keithley controls
        BoxKeithleySizer = wx.StaticBoxSizer(wx.VERTICAL, panel, 'Keithley :') # StaticBox with edge and title
        BoxKeithleyGrid = wx.GridBagSizer(hgap=5, vgap=5) # add widgets to this
        toto = BoxKeithleySizer.GetStaticBox()
        toto.SetBackgroundColour((255, 201, 201)) # set background color of the StaticBox

        # widgets to go in the StaticBoxSizer for Keithley controls
        TextKeithleyFreq = wx.StaticText(BoxKeithleySizer.GetStaticBox(), -1, "Freq.")
        BoxKeithleyFreq = wx.SpinCtrlDouble(BoxKeithleySizer.GetStaticBox(), -1)
        UnitKeithleyFreq = wx.StaticText(BoxKeithleySizer.GetStaticBox(), -1, "MHz")

        BoxKeithleyFreq.SetDigits(5)
        BoxKeithleyFreq.SetIncrement(0.001)
        BoxKeithleyFreq.SetMin(21.600)
        BoxKeithleyFreq.SetMax(21.650)
        BoxKeithleyFreq.SetValue(21.621)

        # add widgets to the StaticBoxSizer for Keithley controls
        BoxKeithleyGrid.Add(TextKeithleyFreq, pos=(0,0), flag = wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
        BoxKeithleyGrid.Add(BoxKeithleyFreq, pos=(0,1), span=(1,5), flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
        BoxKeithleyGrid.Add(UnitKeithleyFreq, pos=(0,6), flag = wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)

        BoxKeithleySizer.Add(BoxKeithleyGrid)
        # add Sizers to main vbox and panel
        vbox.Add(BoxKeithleySizer,0, wx.ALL|wx.LEFT, 5)
        panel.SetSizer(vbox)

class MyApp(wx.App):
    def OnInit(self):

        frame = Mywin()
        frame.Show()
        self.SetTopWindow(frame)

        return True

def main():
    app = MyApp(redirect=False)
    app.MainLoop()

if __name__ == "__main__" :
    main()

内容的提问来源于stack exchange,提问作者Aldehyde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:50:18