首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XRC创建自定义对话框

使用XRC创建自定义对话框
EN

Stack Overflow用户
提问于 2013-02-07 13:03:11
回答 1查看 1.1K关注 0票数 1

我在定义自己的对话框时遇到了困难,这些对话框是用XRC描述的。

我读过http://nebelhom.blogspot.co.nz/2012/04/xrc-and-wxdialogs.html和其他类似的资料,告诉我要这样做:

代码语言:javascript
复制
class ConfigDialog(wx.Dialog):
    def __init__(self, parent):
            self.res = xrc.XmlResource("config_dialog.xrc")
            pre = wx.PreDialog()
            self.res.LoadOnDialog(pre, parent, "ConfigDlg")
            self.PostCreate(pre)

            #Bind controls to events

但是,对于如何将控件绑定到ConfigDialog类中定义的不同方法,我仍然非常困惑。

我试过了

代码语言:javascript
复制
self.btn_1 = xrc.XRCCTRL(self.frame, 'btn_1')

和self.btn_1 = xrc.XRCCTRL(self,'btn_1')

(因为我读过这里 )

PostCreate方法用于将pre的内部转换为self,因此它的作用就像一个真实的ConfigDialog实例。

但两者都不起作用。

你能给我指明正确的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 03:35:39

我使用2步创建作为文档化的这里来解决问题。

下面是一个小例子

代码语言:javascript
复制
# Import both wx main module and the xrc module
import wx
import wx.xrc as xrc

class MyDialog(wx.Dialog):
    """
    This is our dialog. XRC will create it's widgets and all we need to do is
    handle the events.
    """
    def __init__(self, parent, res):

        pre = wx.PreDialog()
        self.PostCreate(pre)

        res.LoadOnDialog(self, None, "MyDialog")

        #Binding events

        self.Bind(wx.EVT_BUTTON, self.on_ok, xrc.XRCCTRL(self, "okButton"))
        self.Bind(wx.EVT_BUTTON, self.on_cancel, xrc.XRCCTRL(self, "cancelButton"))

    def on_ok(self, event):
        """Show a message box informing us we pressed the OK button"""
        msgDlg = wx.MessageDialog(self, "OK pressed", style=wx.OK)
        msgDlg.ShowModal()
        msgDlg.Destroy()
        self.Destroy()

    def on_cancel(self, event):
        """Show a message box informing us we pressed the Cancel button"""
        msgDlg = wx.MessageDialog(self, "Cancel pressed", style=wx.OK)
        msgDlg.ShowModal()
        msgDlg.Destroy()
        self.Destroy()


# Create the simplest wxApp object
app = wx.PySimpleApp()

# Load the XRC resources
res = xrc.XmlResource("example.xrc")

# Show and run the dialog
dlg = MyDialog(None, res)
dlg.ShowModal() 

和XRC文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="cp1255"?>
<resource>
  <object class="wxDialog" name="MyDialog">
    <title></title>
    <object class="wxBoxSizer">
      <orient>wxVERTICAL</orient>
      <object class="sizeritem">
        <object class="wxStaticText">
          <label>Just a little bit of text to make
the dialog a little bit less empty
than it has to be for a simple
example.</label>
          <font>
            <size>12</size>
            <family>default</family>
            <style>normal</style>
            <weight>normal</weight>
            <underlined>0</underlined>
          </font>
        </object>
        <flag>wxALL</flag>
        <border>5</border>
      </object>
      <object class="spacer">
        <size>0,20</size>
      </object>
      <object class="sizeritem">
        <object class="wxBoxSizer">
          <orient>wxHORIZONTAL</orient>
          <object class="spacer">
            <option>1</option>
          </object>
          <object class="sizeritem">
            <object class="wxButton" name="okButton">
              <label>OK</label>
            </object>
            <flag>wxALL</flag>
            <border>5</border>
          </object>
          <object class="sizeritem">
            <object class="wxButton" name="cancelButton">
              <label>Cancel</label>
            </object>
            <flag>wxALL</flag>
            <border>5</border>
          </object>
        </object>
        <flag>wxEXPAND</flag>
      </object>
    </object>
  </object>
</resource> 

最后,给出一个小提示:要结束对话框,请使用EndModal(id)

代码语言:javascript
复制
self.EndModal(wx.ID_OK)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14751757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档