【问题标题】:wx python mysteriously adding a newline character to GUI outputwx python神秘地向GUI输出添加换行符
【发布时间】:2021-05-15 11:46:24
【问题描述】:

所以这里的目标是从用户那里获取输入并从 Excel 表中显示相关数据。 我们的问题是一个相当小但令人恼火的问题...... 当输入没有从数据库中得到匹配时,我们将显示一条消息,指出输入的数字无效。我们使用辅助函数将输出格式化为类似于this

这是格式化代码:

    def makeRMAString(self, RMAnum, DMRnum, serial, status, cdate, udate):
        rma_string = 'RMA#\t: {}\nDMR#\t: {} \nSerial#\t: {}\nStatus\t: {}\nCreated\t: {}\nUpdate\t: {}'
        return rma_string.format(RMAnum, DMRnum, serial, status, cdate, udate)

屏幕截图显示,当输入与数据库中的某些内容匹配时,一切正常。如果没有,我们执行以下行:

self.rmaData.Label = self.makeRMAString('Invalid RMA number', '' , '', '', '', '')

这就是问题发生的地方; 'Invalid RMA number' 没有得到格式良好的输出,而是被推送到下一行,就好像添加了下一行一样: like this

我从命令提示符启动以查看输出,它在那里看起来很好。 Here's proof

我们正在使用 wxpython 的 BoxSizer 来提供帮助:

self.rmaData = wx.StaticText(self.panel, wx.ID_ANY, self.makeRMAString('','','','','',''))
self.sizer_rmaHoriz = wx.BoxSizer(wx.HORIZONTAL)
self.sizer_rmaHoriz.Add(self.rmaData, 4, wx.ALIGN_LEFT|wx.CENTER, 15)
self.rmaData.SetFont(font)

我们使用的是 python 2.7.10

【问题讨论】:

  • 我认为它只是包裹了长字符串,因为您的窗口/控件的宽度太窄了。尝试增加窗口/控件的宽度。
  • 当您将self.rmaData 添加到sizer 时,您指定了proportion4。我怀疑这是错误的,使用01,除非你特别想要4的比例
  • @JustinEzequiel,感谢您的帮助。这似乎不是问题,因为我尝试用“无效的 RMA 编号”填写所有字段,并且它们在窗口的给定空间中都显示得很好。仅当我只有一个字段带有“无效的 RMA 编号”而其他字段为空字符串时,才会发生包装。
  • @RolfofSaxony,感谢您的建议。这种变化导致了水平挤压的布局。似乎“4”规范是为了保留一个足够大的面板来容纳将要显示的文本。
  • 您使用格式化字符串作为单一条目插入到比例为 4 的水平 boxsizer 中,这确实是一种 hack。您依赖的是硬编码的格式化字符串。实际上,您应该努力将各个项目放入某种网格尺寸器中。我仍然认为您的问题围绕着对 sizer 的这种滥用

标签: python python-2.7 wxpython sizer


【解决方案1】:

应要求提供 Grid sizer 的演示。
我选择了GridBagSizer,它似乎最符合您的要求。

import wx  
data = [
        ["99550","539761","016833-0695","Shipped","03/27/20","Unknown"],
        ["99551","539761","xxxxxx-xxxx","Shipped","03/22/20","Unknown"],
        ["99554","539761","016833-0695","Warehouse 1","01/12/19","Unknown"],
        ['Invalid RMA number','','','','','',''],
        ["99555","539761","777777-0695","Warehouse 2","02/27/20","Unknown"],
        ["99556","539761","016833-XXXX","Shipped","03/27/20","03/24/20"],
        ['Invalid RMA number','','','','','','']
        ]
        
class Example(wx.Frame): 
   
    def __init__(self, parent, title): 
        super(Example, self).__init__(parent, title = title) 
             
        self.InitUI() 
        self.Centre() 
        self.Show()      
         
    def InitUI(self): 
        self.idx = 0       
        panel = wx.Panel(self) 
        sizer = wx.GridBagSizer(0,0)

        self.rma = wx.TextCtrl(panel,style=wx.TE_PROCESS_ENTER) 
        sizer.Add(self.rma, pos = (0, 1), flag = wx.ALIGN_CENTRE_VERTICAL)  
        EnterB = wx.Button(panel, label = "Enter RMA") 
        sizer.Add(EnterB, pos = (0,2),flag = wx.ALL, border = 5)    
        
        text = wx.StaticText(panel, label = "RMA   :") 
        sizer.Add(text, pos = (1, 0), flag = wx.ALIGN_CENTRE_VERTICAL|wx.ALL, border = 5)
            
        self.tc = wx.TextCtrl(panel, style=wx.TE_READONLY, size=(150,-1)) 
        sizer.Add(self.tc, pos = (1, 1), flag = wx.EXPAND) 
             
        text1 = wx.StaticText(panel, label = "DMR   :") 
        sizer.Add(text1, pos = (2, 0), flag = wx.ALIGN_CENTRE_VERTICAL|wx.ALL, border = 5) 
        
        self.tc1 = wx.TextCtrl(panel, style=wx.TE_READONLY) 
        sizer.Add(self.tc1, pos = (2,1), flag = wx.EXPAND) 
             
        text2 = wx.StaticText(panel,label = "Serial :") 
        sizer.Add(text2, pos = (3, 0), flag = wx.ALIGN_CENTRE_VERTICAL|wx.ALL, border = 5) 
            
        self.tc2 = wx.TextCtrl(panel, style=wx.TE_READONLY) 
        sizer.Add(self.tc2, pos = (3,1), flag = wx.EXPAND) 
            
        text3 = wx.StaticText(panel,label = "Status :") 
        sizer.Add(text3, pos = (4, 0), flag = wx.ALIGN_CENTRE_VERTICAL|wx.ALL, border = 5)
            
        self.tc3 = wx.TextCtrl(panel, style=wx.TE_READONLY) 
        sizer.Add(self.tc3, pos = (4,1),flag = wx.EXPAND) 
             
        text4 = wx.StaticText(panel,label = "Created:") 
        sizer.Add(text4, pos = (5, 0), flag = wx.ALIGN_CENTRE_VERTICAL|wx.ALL, border = 5) 
            
        self.tc4 = wx.TextCtrl(panel, style=wx.TE_READONLY) 
        sizer.Add(self.tc4, pos = (5,1), flag = wx.EXPAND) 
    
        text5 = wx.StaticText(panel,label = "Update :") 
        sizer.Add(text5, pos = (6, 0), flag = wx.ALIGN_CENTRE_VERTICAL) 
            
        self.tc5 = wx.TextCtrl(panel, style=wx.TE_READONLY) 
        sizer.Add(self.tc5, pos = (6,1), flag = wx.EXPAND)          
    
        Next = wx.Button(panel, label = "Demo") 
            
        sizer.Add(Next, pos = (7, 1)) 
            
        panel.SetSizerAndFit(sizer)

        EnterB.Bind(wx.EVT_BUTTON, self.OnRma)
        self.rma.Bind(wx.EVT_TEXT_ENTER, self.OnRma)
        Next.Bind(wx.EVT_BUTTON, self.OnNext)
        
    def OnRma(self, event):
        rma = self.rma.GetValue()
        idx = [i for i, e in enumerate(data) if e[0] == rma]
        if idx:
            self.idx = idx[0]
            self.OnNext(None)
        else:
            self.tc.SetValue('Invalid RMA number')                       
            self.tc1.SetValue('')                       
            self.tc2.SetValue('')                       
            self.tc3.SetValue('')                       
            self.tc4.SetValue('')                       
            self.tc5.SetValue('')                       

    def OnNext(self, event):
        self.rma.SetValue('')                       
        self.tc.SetValue(data[self.idx][0])                       
        self.tc1.SetValue(data[self.idx][1])                       
        self.tc2.SetValue(data[self.idx][2])                       
        self.tc3.SetValue(data[self.idx][3])                       
        self.tc4.SetValue(data[self.idx][4])                       
        self.tc5.SetValue(data[self.idx][5])                       
        self.idx += 1
        if self.idx > len(data) - 1:
            self.idx = 0
        
app = wx.App() 
Example(None, title = 'GridBag Demo') 
app.MainLoop()

用途:

  • 输入一个 RMA 编号(99550、99551、99554、99555 或 99556),然后按 Enter 或Enter Rma 按钮
  • 输入一些无效的 RMA,然后按 Enter 或 Enter Rma 按钮
  • 点击Demo按钮,将滚动浏览数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多