python - wxPython 自定义对话框加载不正确

标签 python user-interface wxpython modal-dialog

我正在尝试创建一个自定义对话框来显示信息。按下按钮即可激活它,并且该机制运行良好。然而,对话框本身已被破坏。如有任何帮助,我们将不胜感激。

import wx

class ForgotPass(wx.Dialog):

    def __init__(self, *args, **kwargs):
         super(ForgotPass, self).__init__(*args, **kwargs) 

        self.InitUI()

    def InitUI(self):
        self.panel = wx.Panel(self)
        self.sizer = wx.BoxSizer(wx.VERTICAL)

        self.title = wx.StaticText(self.panel, label='Forgotten Your Password?', style=wx.ALIGN_CENTER)
        self.title.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD, underline=True))  # Underlined & Bold
        self.sizer.Add(self.title)

        self.text = wx.StaticText(self.panel, label="Contact 'TheHiguty' via ingame PM to have your password reset!", style=wx.ALIGN_CENTER)
        self.sizer.Add(self.text)

        self.SetSizer(self.sizer)
        self.SetSize((200, 150))
        self.SetTitle('Forgotten Your Password')
        self.Center()
        self.Show(True)

def main():
    app = wx.App(False)
    ForgotPass(None)
    app.MainLoop()

if __name__ == "__main__":
    main()

但是,我得到的不是正确显示文本,而是:

enter image description here

非常感谢任何解决此问题的帮助!

最佳答案

self.SetSizer(self.sizer) 之后添加 self.sizer.Fit(self.panel) 来解决该问题。 不过,如果这样做,您会发现水平宽度太小,因此您可能需要扩大它。完整代码并修复:

import wx

class ForgotPass(wx.Dialog):

    def __init__(self, *args, **kwargs):
        super(ForgotPass, self).__init__(*args, **kwargs) 

        self.InitUI()

    def InitUI(self):
        self.panel = wx.Panel(self)
        self.sizer = wx.BoxSizer(wx.VERTICAL)

        self.title = wx.StaticText(self.panel, label='Forgotten Your Password?', style=wx.ALIGN_CENTER)
        self.title.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD, underline=True))  # Underlined & Bold
        self.sizer.Add(self.title)

        self.text = wx.StaticText(self.panel, label="Contact 'TheHiguty' via ingame PM to have your password reset!", style=wx.ALIGN_CENTER)
        self.sizer.Add(self.text)

        self.SetSizer(self.sizer)
        self.sizer.Fit(self.panel)
        self.SetSize((400, 150))
        self.SetTitle('Forgotten Your Password')
        self.Center()
        self.Show(True)

def main():
    app = wx.App(False)
    ForgotPass(None)
    app.MainLoop()

if __name__ == "__main__":
    main()

尽管如此,有一种方法可以创建看起来更干净并且对于程序运行的任何操作系统都更原生的对话框:使用 wx.MessageBox

这是一个简单的例子:

import wx

class MainWindow(wx.Frame):
    def __init__(self, parent):
        super(MainWindow, self).__init__(parent)

        self.sizer = wx.BoxSizer(wx.VERTICAL)

        self.button = wx.Button(self, wx.ID_ANY, label="Test")
        self.sizer.Add(self.button)
        self.Bind(wx.EVT_BUTTON, self.password_dialog, self.button)

        self.SetSizer(self.sizer)
        self.sizer.Fit(self)
        self.SetTitle('Test')
        self.SetSize((100, 100))
        self.Centre()
        self.Show(True)

    def password_dialog(self, event):
        wx.MessageBox(
            'Contact `TheHiguty` blah blah blah',
            'Forgotten your password?',
            wx.OK|wx.ICON_ERROR)

if __name__ == '__main__':
    app = wx.App()
    MainWindow(None)
    app.MainLoop()

关于python - wxPython 自定义对话框加载不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14113899/

相关文章:

python - 返回多个 HttpResponse 对象,这些对象是 Excel 电子表格

python - 为什么仅当 Debug=False AND db 设置为 Heroku 上的生产数据库时,django 才会在服务器 500 上失败?

ruby - 在 OS X 上轻松编辑和运行 Ruby

python - TextCtrl 的 wxPython C++ 部分被删除

python - wxPython 中的按钮事件出现错误

python - web2py - 使用 anchor 标记回调时不会调用 Controller 函数

Python 如何一次遍历列表 100 个元素,直到到达所有元素?

java - 程序给出线程错误异常

user-interface - Ansible - 如何检测您在安装了 GUI 系统的 Linux 机器上?

python - 居中静态文本 WxPython