<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # wxPython 對話框 > 原文: [http://zetcode.com/wxpython/dialogs/](http://zetcode.com/wxpython/dialogs/) 對話框窗口或對話框是大多數現代 GUI 應用必不可少的部分。 對話被定義為兩個或更多人之間的對話。 在計算機應用中,對話框是一個窗口,用于與應用“對話”。 對話框用于輸入數據,修改數據,更改應用設置等。對話框是用戶與計算機程序之間進行通信的重要手段。 ## 一個簡單的消息框 一個消息框向用戶提供簡短信息。 一個很好的例子是 CD 刻錄應用。 CD 刻錄完成后,將彈出一個消息框。 `message_box.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial This example shows a simple message box. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, *args, **kwargs): super(Example, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): wx.CallLater(3000, self.ShowMessage) self.SetSize((300, 200)) self.SetTitle('Message box') self.Centre() def ShowMessage(self): wx.MessageBox('Download completed', 'Info', wx.OK | wx.ICON_INFORMATION) def main(): app = wx.App() ex = Example(None) ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 此示例顯示三秒鐘后的消息框。 ```py wx.CallLater(3000, self.ShowMessage) ``` `wx.CallLater`在三秒鐘后調用一個方法。 第一個參數是時間值,之后將調用給定方法。 該參數以毫秒為單位。 第二個參數是要調用的方法。 ```py def ShowMessage(self): wx.MessageBox('Download completed', 'Info', wx.OK | wx.ICON_INFORMATION) ``` `wx.MessageBox`顯示一個小的對話框窗口。 我們提供了三個參數:文本消息,標題消息和標志。 這些標志用于顯示不同的按鈕和圖標。 在本例中,我們顯示一個確定按鈕和信息圖標。 ![Message box](https://img.kancloud.cn/8b/9d/8b9dad05f5611913088c9c897a1e4b49_397x282.jpg) 圖:一個消息框 ## 預定義對話框 wxPython 有幾個預定義的對話框。 這些是用于常見編程任務的對話框,例如顯示文本,接收輸入,加載和保存文件。 ## `MessageDialog` 消息對話框用于向用戶顯示消息。 它們比我們在前面的示例中看到的簡單消息框更加靈活。 它們是可定制的。 我們可以更改將在對話框中顯示的圖標和按鈕。 | 標志 | 含義 | | --- | --- | | `wx.OK` | 顯示確定按鈕 | | `wx.CANCEL` | 顯示取消按鈕 | | `wx.YES_NO` | 顯示是,否按鈕 | | `wx.YES_DEFAULT` | 將是按鈕設為默認 | | `wx.NO_DEFAULT` | 將無按鈕設為默認 | | `wx.ICON_EXCLAMATION` | 顯示警報圖標 | | `wx.ICON_ERROR` | 顯示錯誤圖標 | | `wx.ICON_HAND` | 與`wx.ICON_ERROR`相同 | | `wx.ICON_INFORMATION` | 顯示信息圖標 | | `wx.ICON_QUESTION` | 顯示問題圖標 | 這些是可以與`wx.MessageDialog`類一起使用的標志。 `message_dialogs.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial This example shows four types of message dialogs. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, *args, **kwargs): super(Example, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): panel = wx.Panel(self) hbox = wx.BoxSizer() sizer = wx.GridSizer(2, 2, 2, 2) btn1 = wx.Button(panel, label='Info') btn2 = wx.Button(panel, label='Error') btn3 = wx.Button(panel, label='Question') btn4 = wx.Button(panel, label='Alert') sizer.AddMany([btn1, btn2, btn3, btn4]) hbox.Add(sizer, 0, wx.ALL, 15) panel.SetSizer(hbox) btn1.Bind(wx.EVT_BUTTON, self.ShowMessage1) btn2.Bind(wx.EVT_BUTTON, self.ShowMessage2) btn3.Bind(wx.EVT_BUTTON, self.ShowMessage3) btn4.Bind(wx.EVT_BUTTON, self.ShowMessage4) self.SetSize((300, 200)) self.SetTitle('Messages') self.Centre() def ShowMessage1(self, event): dial = wx.MessageDialog(None, 'Download completed', 'Info', wx.OK) dial.ShowModal() def ShowMessage2(self, event): dial = wx.MessageDialog(None, 'Error loading file', 'Error', wx.OK | wx.ICON_ERROR) dial.ShowModal() def ShowMessage3(self, event): dial = wx.MessageDialog(None, 'Are you sure to quit?', 'Question', wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) dial.ShowModal() def ShowMessage4(self, event): dial = wx.MessageDialog(None, 'Unallowed operation', 'Exclamation', wx.OK | wx.ICON_EXCLAMATION) dial.ShowModal() def main(): app = wx.App() ex = Example(None) ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 在我們的示例中,我們創建了四個按鈕并將它們放入網格大小調整器中。 這些按鈕將顯示四個不同的對話框窗口。 我們通過指定不同的樣式標志來創建它們。 ```py def ShowMessage2(self, event): dial = wx.MessageDialog(None, 'Error loading file', 'Error', wx.OK | wx.ICON_ERROR) dial.ShowModal() ``` 消息對話框的創建很簡單。 通過將`None`作為父級,將對話框設置為頂級窗口。 這兩個字符串提供了消息文本和對話框標題。 通過指定`wx.OK`和`wx.ICON_ERROR`標志,我們顯示一個 OK 按鈕和一個錯誤圖標。 為了在屏幕上顯示對話框,我們調用`ShowModal()`方法。 ## `AboutDialog` 幾乎每個應用都有一個典型的“關于”對話框。 通常將其放在“幫助”菜單中。 該對話框的目的是向用戶提供有關應用名稱和版本的基本信息。 過去,這些對話框非常簡短。 如今,這些框中的大多數都提供了有關作者的其他信息。 他們感謝其他程序員或文檔編寫者。 他們還提供有關應用許可證的信息。 這些框可以顯示公司徽標或應用徽標。 為了創建一個關于對話框,我們必須創建兩個對象。 一個`wx.adv.AboutDialogInfo`和一個`wx.adv.AboutBox`。 wxPython 可以顯示兩種“關于”框。 這取決于我們使用的平臺和調用的方法。 它可以是本機對話框,也可以是 wxPython 通用對話框。 Windows 本機“關于”對話框無法顯示自定義圖標,許可證文本或 URL。 如果我們省略這三個字段,則 wxPython 將顯示一個本機對話框。 否則,它將訴諸通用。 如果我們想保持本地化,建議在單獨的菜單項中提供許可證信息。 GTK+ 可以顯示所有這些字段。 `about_dialog.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' ZetCode wxPython tutorial In this example, we create an about dialog box. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 ''' import wx import wx.adv class Example(wx.Frame): def __init__(self, *args, **kwargs): super(Example, self).__init__(*args, **kwargs) self.InitUI() def InitUI(self): menubar = wx.MenuBar() help = wx.Menu() help.Append(wx.ID_ANY, '&About') help.Bind(wx.EVT_MENU, self.OnAboutBox) menubar.Append(help, '&Help') self.SetMenuBar(menubar) self.SetSize((350, 250)) self.SetTitle('About dialog box') self.Centre() def OnAboutBox(self, e): description = """File Hunter is an advanced file manager for the Unix operating system. Features include powerful built-in editor, advanced search capabilities, powerful batch renaming, file comparison, extensive archive handling and more. """ licence = """File Hunter is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. File Hunter is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with File Hunter; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA""" info = wx.adv.AboutDialogInfo() info.SetIcon(wx.Icon('hunter.png', wx.BITMAP_TYPE_PNG)) info.SetName('File Hunter') info.SetVersion('1.0') info.SetDescription(description) info.SetCopyright('(C) 2007 - 2019 Jan Bodnar') info.SetWebSite('http://www.zetcode.com') info.SetLicence(licence) info.AddDeveloper('Jan Bodnar') info.AddDocWriter('Jan Bodnar') info.AddArtist('The Tango crew') info.AddTranslator('Jan Bodnar') wx.adv.AboutBox(info) def main(): app = wx.App() ex = Example(None) ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 該示例有一個關于菜單項。 選擇項目后,將顯示關于框。 ```py description = """File Hunter is an advanced file manager for the Unix operating system. Features include powerful built-in editor, advanced search capabilities, powerful batch renaming, file comparison, extensive archive handling and more. """ ``` 最好不要在應用的代碼中放入太多文本。 我們不想使示例過于復雜,因此我們將所有文本放入代碼中。 但是在實際程序中,文本應單獨放置在文件中。 它有助于我們維護應用。 例如,如果我們想將我們的應用翻譯成其他語言。 ```py info = wx.adv.AboutDialogInfo() ``` 首先要做的是創建一個`wx.AboutDialogInfo`對象。 構造器為空。 它不接受任何參數。 ```py info.SetIcon(wx.Icon('hunter.png', wx.BITMAP_TYPE_PNG)) info.SetName('File Hunter') info.SetVersion('1.0') info.SetDescription(description) info.SetCopyright('(C) 2007 - 2014 Jan Bodnar') info.SetWebSite('http://www.zetcode.com') info.SetLicence(licence) info.AddDeveloper('Jan Bodnar') info.AddDocWriter('Jan Bodnar') info.AddArtist('The Tango crew') info.AddTranslator('Jan Bodnar') ``` 下一步是在創建的`wx.AboutDialogInfo`對象上調用所有必需的方法。 ```py wx.adv.AboutBox(info) ``` 最后,我們創建一個`wx.adv.AboutBox`小部件。 它唯一需要的參數是`wx.adv.AboutDialogInfo`對象。 ![About dialog box](https://img.kancloud.cn/e6/55/e6550e9c38ef355d57dba3df5f423fb3_428x348.jpg) 圖:關于對話框 ## 自定義對話框 在下一個示例中,我們創建一個自定義對話框。 圖像編輯應用可以更改圖片的顏色深度。 為了提供這種功能,我們可以創建一個合適的對話框。 `custom_dialog.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' ZetCode wxPython tutorial In this code example, we create a custom dialog. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 ''' import wx class ChangeDepthDialog(wx.Dialog): def __init__(self, *args, **kw): super(ChangeDepthDialog, self).__init__(*args, **kw) self.InitUI() self.SetSize((250, 200)) self.SetTitle("Change Color Depth") def InitUI(self): pnl = wx.Panel(self) vbox = wx.BoxSizer(wx.VERTICAL) sb = wx.StaticBox(pnl, label='Colors') sbs = wx.StaticBoxSizer(sb, orient=wx.VERTICAL) sbs.Add(wx.RadioButton(pnl, label='256 Colors', style=wx.RB_GROUP)) sbs.Add(wx.RadioButton(pnl, label='16 Colors')) sbs.Add(wx.RadioButton(pnl, label='2 Colors')) hbox1 = wx.BoxSizer(wx.HORIZONTAL) hbox1.Add(wx.RadioButton(pnl, label='Custom')) hbox1.Add(wx.TextCtrl(pnl), flag=wx.LEFT, border=5) sbs.Add(hbox1) pnl.SetSizer(sbs) hbox2 = wx.BoxSizer(wx.HORIZONTAL) okButton = wx.Button(self, label='Ok') closeButton = wx.Button(self, label='Close') hbox2.Add(okButton) hbox2.Add(closeButton, flag=wx.LEFT, border=5) vbox.Add(pnl, proportion=1, flag=wx.ALL|wx.EXPAND, border=5) vbox.Add(hbox2, flag=wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, border=10) self.SetSizer(vbox) okButton.Bind(wx.EVT_BUTTON, self.OnClose) closeButton.Bind(wx.EVT_BUTTON, self.OnClose) def OnClose(self, e): self.Destroy() class Example(wx.Frame): def __init__(self, *args, **kw): super(Example, self).__init__(*args, **kw) self.InitUI() def InitUI(self): tb = self.CreateToolBar() tb.AddTool(toolId=wx.ID_ANY, label='', bitmap=wx.Bitmap('color.png')) tb.Realize() tb.Bind(wx.EVT_TOOL, self.OnChangeDepth) self.SetSize((350, 250)) self.SetTitle('Custom dialog') self.Centre() def OnChangeDepth(self, e): cdDialog = ChangeDepthDialog(None, title='Change Color Depth') cdDialog.ShowModal() cdDialog.Destroy() def main(): app = wx.App() ex = Example(None) ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 在上面的示例中,我們創建了一個自定義對話框。 ```py class ChangeDepthDialog(wx.Dialog): def __init__(self, *args, **kw): super(ChangeDepthDialog, self).__init__(*args, **kw) ``` 在我們的代碼示例中,我們創建了一個自定義的`ChangeDepthDialog`對話框。 我們繼承自`wx.Dialog`小部件。 ```py def OnChangeDepth(self, e): cdDialog = ChangeDepthDialog(None, title='Change Color Depth') cdDialog.ShowModal() cdDialog.Destroy() ``` 我們實例化一個`ChangeDepthDialog class`。 然后我們調用`ShowModal()`方法。 稍后,我們必須使用`Destroy()`銷毀對話框。請注意,對話框和頂層窗口之間的視覺差異。 下圖的對話框已激活。 在對話框被銷毀之前,我們無法使用頂層窗口。 窗口的標題欄有明顯的區別。 ![Custom dialog](https://img.kancloud.cn/85/d3/85d3155feba5daa1d54d3216de5a5031_258x228.jpg) 圖:一個自定義對話框 在本章中,我們介紹了對話框。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看