2

情報を表示するためのカスタムダイアログを作成しようとしています。ボタンを押すと作動し、そのメカニズムは完全に機能しています。ただし、ダイアログ自体は壊れています。どんな助けでも大歓迎です。

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()

ただし、テキストを正しく表示するのではなく、次のようになります。

ここに画像の説明を入力してください

この問題を解決するための助けは大歓迎です!

4

2 に答える 2

2

問題を修正するには、self.sizer.Fit(self.panel)後に追加してください。self.SetSizer(self.sizer)ただし、そうすると、水平方向の幅が小さすぎることがわかるので、それを拡大することをお勧めします。修正された完全なコード:

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()

ただし、プログラムが実行されているOSに関係なく、よりクリーンでネイティブに見えるダイアログを作成する方法があります。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()
于 2013-01-01T20:43:32.587 に答える
0

これは古い質問であることを理解していますが、カスタムダイアログボックスに何を使用していて、「ノイズ/アイコン」がないことに注意したいと思います(少なくとも私の意見では)。これはwxPython2.9.5.0で動作します。

これは私が使用するコードです:

from wx.lib.pubsub import pub

def showConfirmDlg(message, caption, flag=wx.OK|wx.ICON_NONE):
    msg = wx.MessageDialog(None, message=message,
                       caption=caption, style=flag)
    msg.ShowModal()
    msg.Destroy()

pub.subscribe(showConfirmDlg, 'dialog.confirm')

スニペットでわかるように、この関数をさまざまなメッセージに繰り返し使用して、複数の関数定義の必要性を排除できます。例のテキストを含むダイアログボックスを表示するには、次のようにします。

def onButtonPress(self, event):
    pub.sendMessage('dialog.confirm',
        message="Forgot your password?\n Contact 'TheHiguty' (rest of text)",
        caption="Forgot Password?") # Could even just put caption=""

さらに再利用できるオプションについては、「flag = wx.OK | wx.ICON_NONE」を「flag」だけに置き換えて、関数呼び出しに「flag = wx.OK |(任意のスタイル)」を追加できます。

PythonとwxPythonに関するその他の例については、MikeDriscollのブログサイトTheMouse vsThePythonを強くお勧めします。私はそれが驚くほど有益であることに気づき、Driscoll氏からwxPythonについて多くを学びました。

これがあなたや他の人に役立つことを願っています!

--編集-メッセージボックスからアイコンを自分で削除しようとしたときに、誤ってwx.ICON_NONEを見つけたことに言及する必要があります。

于 2013-10-10T03:00:35.690 に答える