我最近开始学习 python,甚至最近决定尝试学习如何为我的代码提供 GUI(使用 wxPython Phoenix)。然而,就在我以为我开始掌握基础知识的时候,我尝试通过一个事件将静态文本添加到面板中。尽管显示了正确的消息,但尽管我指定了位置,但它仍显示在面板的左上角。如果我调整框架的大小,它会转到正确的位置,但显然我希望它直接去那里。
一旦我使框架变大(假设空间是问题)并使用滚动面板,我只尝试运行程序,但都没有工作。我一直在查看文档,但无法弄清楚我做错了什么。
这是代码的简化版本(我省略了 elif/else 语句,因为它们对于不同的字符串本质上是相同的):
import wx
import random
class MyPanel(wx.Panel):
def __init__(self, parent):
super().__init__(parent)
self.sizer = wx.BoxSizer(wx.VERTICAL)
txt1 = wx.StaticText(self, label="How many sides to your dice?")
self.sizer.Add(txt1, 0, wx.TOP | wx.CENTER, 5)
self.spin = wx.SpinCtrl(self, min=-200, max=200)
self.sizer.Add(self.spin, 0, wx.BOTTOM | wx.CENTER, 5)
txt2 = wx.StaticText(self, label="How many dice are you rolling?")
self.sizer.Add(txt2, 0, wx.TOP | wx.CENTER, 5)
self.spin2 = wx.SpinCtrl(self, min=-200, max=200)
self.sizer.Add(self.spin2, 0, wx.BOTTOM | wx.CENTER, 5)
txt3 = wx.StaticText(self, label="If you have any modifiers add them here!")
self.sizer.Add(txt3, 0, wx.TOP | wx.CENTER, 5)
self.spin3 = wx.SpinCtrl(self, min=-200, max=200)
self.sizer.Add(self.spin3, 0, wx.BOTTOM | wx.CENTER, 5)
bttn = wx.Button(self, label="Roll 'em")
self.sizer.Add(bttn, 0, wx.ALL | wx.CENTER, 10)
bttn.Bind(wx.EVT_BUTTON, self.on_push)
self.size = wx.BoxSizer(wx.VERTICAL)
box = wx.StaticBox(self, wx.ID_ANY, """Your Roll Results will display here!
""")
self.size.Add(box, 0, wx.ALL | wx.CENTER, 5)
self.sizer.Add(self.size, 0, wx.ALL | wx.CENTER, 5)
self.SetSizer(self.sizer)
def on_push(self, event):
d_size = self.spin.GetValue()
d_amount = self.spin2.GetValue()
mod = self.spin3.GetValue()
mx_am = d_size * d_amount
mn_am = d_amount
bot_quart = mx_am * 0.25
half = mx_am / 2
three_quart = mx_am - bot_quart
if int(d_size) < 0 or int(d_amount) < 0:
message = "Sorry, you entered a negative where that is impossible."
errtxt = wx.StaticText(self, label=message)
self.size.Add(errtxt, 0, wx.BOTTOM | wx.ALIGN_CENTER, 5)
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='Dice Roller')
self.panel = MyPanel(self)
self.Centre()
self.Show()
if __name__ == '__main__':
app = wx.App()
frame = MyFrame()
app.MainLoop()
就像我说的,errtext 首先出现在框架的左上角,然后在调整框架大小时下降到正确的位置。非常感谢任何可能的帮助(特别是如果您能告诉我如何将 errtext 放入静态框中)。