大松_Dason 2022-02-23 20:35 采纳率: 100%
浏览 28
已结题

wxPython用盒子布局管理器了但控件全在最左上角

给生肖计算器加上了图形用户界面,可是盒子布局管理器不知道为什么有问题

# coding=utf-8
import wx

class ADCal(wx.Frame):
    def cal(self, event):
        year = text_box.GetValue()
        if year.isdigit() == True:
            int(year)
        else:
            self.result = wx.SetLabelText('请输入整数')

        # 计算公元年份和公元前年份生肖的表达式与所有生肖
        AA = (year - 1) % 12
        AB = (year - 1) % 10
        AD = ["鸡", "狗", "猪", "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴"]

        # 解决year为0导致的异常
        try:
            # 判断年份为公元后还是公元前并输出结果
            if year >= 1:
                wx.SetLabelText('生肖:{}'.format(AD[AA]))
            else:
                wx.SetLabelText('生肖:{}'.format(AD[AB + 1]))
        except IndexError as e:
            self.result = wx.SetLabelText('没有公元0年')
        finally:
            finally = ''

    def __init__(self):
        super().__init__(None, title='生肖计算器', size=(280, 110), pos=(0, 0))
        panel = wx.Panel(parent=self)
        self.caption = wx.StaticText(parent=panel, label='输入公元前年份需加上负号,年份不能为0,输入q退出。')
        self.text_type = wx.StaticText(parent=panel, label='年份:')
        text_box = wx.TextCtrl(panel)
        button = wx.Button(parent=panel, label='计算')
        self.Bind(wx.EVT_BUTTON, self.cal, button)
        self.result_type = wx.StaticText(parent=panel, label='生肖:')
        self.result = wx.StaticText(parent=panel, label='')

        # 布局管理
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        hbox.Add(text_box, proportion=2, flag=wx.EXPAND | wx.ALL, border=10)
        hbox.Add(button, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(self.caption, proportion=1, flag=wx.ALIGN_LEFT | wx.FIXED_MINSIZE | wx.ALL, border=10)
        vbox.Add(self.text_type, proportion=1, flag=wx.ALIGN_LEFT | wx.FIXED_MINSIZE | wx.LEFT, border=10)
        vbox.Add(hbox, proportion=1, flag=wx.ALIGN_LEFT)
        vbox.Add(self.result_type, proportion=1, flag=wx.ALIGN_LEFT | wx.FIXED_MINSIZE | wx.ALL, border=10)
        vbox.Add(self.result, proportion=1, flag=wx.ALIGN_LEFT | wx.FIXED_MINSIZE | wx.LEFT, border=10)

app = wx.App()
frm = ADCal()
frm.Show()
app.MainLoop()

控件位置不对

img

  • 写回答

2条回答 默认 最新

查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月4日
  • 已采纳回答 2月24日
  • 创建了问题 2月23日

悬赏问题

  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教