青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
金慶的專欄
C++博客
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
::
423 隨筆 :: 0 文章 :: 454 評論 :: 0 Trackbacks
公告
我的隨筆
我的評論
我參與的隨筆
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(502)
1. C/C++(166)
(rss)
2. 網游開發(108)
(rss)
3. Golang(20)
(rss)
4. Linux/Unix(30)
(rss)
5. 軟工與管理(44)
(rss)
6. Python(23)
(rss)
7. Erlang(18)
(rss)
8. Rust(16)
(rss)
9. 其它(77)
(rss)
隨筆檔案
(423)
2023年1月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (1)
2022年4月 (6)
2022年1月 (2)
2021年12月 (4)
2021年11月 (6)
2021年10月 (2)
2021年9月 (2)
2021年8月 (7)
2021年7月 (2)
2021年5月 (2)
2021年3月 (1)
2021年2月 (2)
2021年1月 (1)
2020年12月 (1)
2020年10月 (1)
2020年9月 (5)
2020年8月 (1)
2020年7月 (1)
2020年6月 (1)
2020年4月 (2)
2020年3月 (3)
2020年2月 (3)
2020年1月 (1)
2019年12月 (1)
2019年9月 (2)
2019年4月 (2)
2019年1月 (1)
2018年12月 (1)
2018年11月 (3)
2018年10月 (1)
2018年9月 (3)
2018年8月 (3)
2018年7月 (2)
2018年6月 (4)
2018年5月 (4)
2018年4月 (4)
2018年3月 (1)
2018年1月 (2)
2017年12月 (2)
2017年11月 (3)
2017年10月 (3)
2017年8月 (7)
2017年7月 (1)
2017年6月 (1)
2017年5月 (3)
2017年4月 (3)
2017年3月 (3)
2017年2月 (2)
2017年1月 (2)
2016年12月 (5)
2016年11月 (2)
2016年10月 (2)
2016年9月 (1)
2016年8月 (6)
2016年7月 (3)
2016年6月 (2)
2016年5月 (4)
2016年4月 (2)
2016年3月 (2)
2016年1月 (3)
2015年12月 (2)
2015年11月 (2)
2015年10月 (1)
2015年8月 (2)
2015年7月 (1)
2015年6月 (1)
2015年5月 (4)
2015年4月 (3)
2015年3月 (4)
2015年2月 (5)
2015年1月 (4)
2014年12月 (3)
2014年11月 (3)
2014年10月 (2)
2014年9月 (3)
2014年8月 (1)
2014年4月 (4)
2014年3月 (1)
2014年2月 (4)
2014年1月 (5)
2013年12月 (5)
2013年11月 (5)
2013年9月 (2)
2013年8月 (2)
2013年7月 (2)
2013年6月 (2)
2013年5月 (1)
2013年1月 (2)
2012年12月 (1)
2012年11月 (1)
2012年9月 (1)
2012年8月 (3)
2012年7月 (2)
2012年6月 (1)
2012年4月 (3)
2012年3月 (2)
2012年2月 (3)
2012年1月 (2)
2011年11月 (2)
2011年10月 (3)
2011年9月 (2)
2011年8月 (2)
2011年7月 (3)
2011年6月 (2)
2011年5月 (3)
2011年1月 (2)
2010年12月 (1)
2010年11月 (2)
2010年10月 (2)
2010年9月 (3)
2010年8月 (2)
2010年7月 (3)
2010年6月 (1)
2010年5月 (3)
2010年4月 (3)
2010年3月 (5)
2010年2月 (4)
2010年1月 (4)
2009年12月 (2)
2009年11月 (3)
2009年10月 (4)
2009年9月 (3)
2009年8月 (2)
2009年7月 (4)
2009年6月 (1)
2009年5月 (3)
2009年4月 (4)
2009年3月 (2)
2009年2月 (5)
2009年1月 (1)
2008年12月 (7)
2008年11月 (4)
2008年10月 (1)
2008年9月 (3)
2008年8月 (4)
2008年7月 (3)
2008年6月 (4)
2008年5月 (6)
2008年4月 (7)
2008年3月 (6)
2008年1月 (5)
2007年12月 (7)
2007年11月 (4)
2007年10月 (5)
2007年9月 (6)
2007年8月 (8)
2007年7月 (5)
相冊
公告照片
搜索
積分與排名
積分 - 659884
排名 - 25
最新評論
1.?re: boost::asio::spawn 將一統C++網絡庫
asio 成為C++首選網絡庫
--linda
2.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--金慶
3.?re: mingw編譯OrzNet
能發送一個mingw編譯好的OrzNet庫給我嗎? liuweiqcxy@163.com
謝謝!
--劉威
4.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--bigbad
5.?re: log4cxx中文輸出錯誤補丁
評論內容較長,點擊標題查看
--bigbad
閱讀排行榜
1.?"multiple definition of" 錯誤(11060)
2.?SVN中邪惡的replace(10986)
3.?VS2005編譯libevent(10431)
4.?混音算法的學習與研究(10238)
5.?C調用lua腳本的效率測試(9020)
評論排行榜
1.?VC6正在被拋棄(35)
2.?VS2005編譯libevent(21)
3.?"multiple definition of" 錯誤(18)
4.?C++引用優于指針(17)
5.?ACE與ASIO之間關于Socket編程的比較(16)
XRC初步
XRC初步
轉自:
云雀
的
XRC初步(上)
和
XRC初步(下)
XRC初步(上)
wxPython 中定義用戶界面布局可以采用兩種方法。傳統的方法是將界面布局代碼直接寫在源文件之中,這種方法不需要學習XML語法,概念上較為簡單,避免了同時維護多個文件的麻煩;同時,對IDE的自動完成的支持較好。另一種方法則是采用XML資源文件,即XRC(XML Resource)。XRC的基本出發點是界面布局和程序邏輯的分離,即將界面布局代碼采用XML的方式放在分離的文件之中;在程序中不涉及控件的創建和布局,只需要加載相應的資源并處理事件綁定即可。在wxPython中采用XRC分離界面布局和程序邏輯主要有以下幾個方面的好處:
1. 提高了程序的可維護性
2. 界面布局可由專業人員設計
3. 更好的支持GUI布局設計工具
4. 作為wxWidgets的規范,XRC資源可通用于C++、Python等語言
示例
使用XRC建立用戶界面必須建立兩個分離的文件:XML資源文件(.xrc)和python源文件。XRC文件包含了用戶界面布局信息,如下例:
#design layout in a separate XML file
<?
xml version="1.0" encoding="utf-8"
?>
<
resource
>
<
object
class
="wxFrame"
name
="mainFrame"
>
<
title
>
My Frame
</
title
>
<
object
class
="wxPanel"
name
="panel"
>
<
object
class
="wxFlexGridSizer"
>
<
cols
>
2
</
cols
>
<
rows
>
3
</
rows
>
<
vgap
>
5
</
vgap
>
<
hgap
>
5
</
hgap
>
<
object
class
="sizeritem"
>
<
object
class
="wxStaticText"
name
="label1"
>
<
label
>
First name:
</
label
>
</
object
>
</
object
>
<
object
class
="sizeritem"
>
<
object
class
="wxTextCtrl"
name
="text1"
/>
</
object
>
<
object
class
="sizeritem"
>
<
object
class
="wxStaticText"
name
="label2"
>
<
label
>
Last name:
</
label
>
</
object
>
</
object
>
<
object
class
="sizeritem"
>
<
object
class
="wxTextCtrl"
name
="text2"
/>
</
object
>
<
object
class
="spacer"
>
<
size
>
0,0
</
size
>
</
object
>
<
object
class
="sizeritem"
>
<
object
class
="wxButton"
name
="button"
>
<
label
>
Submit
</
label
>
</
object
>
</
object
>
</
object
>
</
object
>
</
object
>
</
resource
>
Python源文件中則包括加載資源文件和事件綁定代碼,同時可以使用xrc.XRCCTRL方法從名字獲取控件,使用xrc.XRCID方法獲取控件ID:
#
logic by itself in module
import
wx
from
wx
import
xrc
class
MyApp(wx.App):
def
OnInit(self):
self.res
=
xrc.XmlResource(
'
gui.xrc
'
)
assert
self.res
self.init_frame()
return
True
def
init_frame(self):
self.frame
=
self.res.LoadFrame(None,
'
mainFrame
'
)
assert
self.frame
self.panel
=
xrc.XRCCTRL(self.frame,
'
panel
'
)
self.text1
=
xrc.XRCCTRL(self.panel,
'
text1
'
)
self.text2
=
xrc.XRCCTRL(self.panel,
'
text2
'
)
self.frame.Bind(wx.EVT_BUTTON, self.OnSubmit, id
=
xrc.XRCID(
'
button
'
))
self.frame.Show()
def
OnSubmit(self, evt):
wx.MessageBox(
'
Your name is %s %s!
'
%
(self.text1.GetValue(), self.text2.GetValue()),
'
Feedback
'
)
if
__name__
==
'
__main__
'
:
app
=
MyApp(False)
app.MainLoop()
創建XRC文件
首先我們看看XRC的組成。XRC文件由一系列預定義的標簽組成,你可以注意到這些預定義的標簽與控件創建時的關鍵字參數相似。例如,在wxPython中創建按鍵的代碼如下:
button
=
wx.Button(parent
=
panel, id
=
wx.ID_ANY, label
=
'
Submit
'
)
與之相應的XRC代碼則是這個樣子:
<
object
class
="wxButton"
name
="button"
>
<
label
>
Submit
</
label
>
</
object
>
從例示中可以注意到幾個XRC的關鍵概念:
1. 每個控件與一個XML節點相對應
2. 控件間的層次關系與XML節點間層次關系相對應,放置控件的容器與相應的XML節點的父節點相對應
3. 節點class屬性值對應控件的C++類名
4. 節點name屬性值為控件在XRC文件中的唯一標識,可通過該值自python源文件中獲取控件
5. label等其余參數在XRC文件中作為節點的子節點出現
有了這些基本概念,現在我們可以使用XRC文件來布局我們的用戶界面了。存在大量的工具以可視化的方式來幫助我們完成這個繁瑣的工作。wxPython 自帶的XRCED以一種半可視化的方式(可視化的設定控件屬性并預覽,但不支持直接拖放控件)支持用戶界面設計;開源的wxglade則支持直接的控件拖放,并可生成C++、python、perl、lisp和XRC的源文件;wxDesigner、dialogBlock,wxDesigner,BOA 等工具同樣值得一試。
XRC初步(下)
python源文件中的處理
完成了XRC界面布局文件的編寫,下一步必須在python源文件中做相應的處理。與XRC處理相關的wxPython代碼段主要包括三個方面:資源文件的加載,控件的獲取和事件綁定代碼:
1.導入與XRC處理相關的xrc模塊:
import
wx.xrc as xrc
2.加載資源文件:
self.res
=
xrc.XmlResource(
'
XRCfilename.xrc
'
)
3.獲取控件。此過程不需要顯式的創建控件,通過設計XRC文件時相應的name屬性值獲取即可:
#
加載Frame,第一個參數為父窗口,當前為頂層窗口,故為None
#
第二個參數為設計XRC文件時Frame的name屬性值
self.frame
=
self.res.LoadFrame(None,
'
mainFrame
'
)
#
獲取控件,第一個參數為控件的父窗口
#
第二個參數為設計XRC文件時控件的name屬性值
self.panel
=
xrc.XRCCTRL(self.frame,
'
panel
'
)
self.text1
=
xrc.XRCCTRL(self.panel,
'
text1
'
)
#
獲取panel中的控件時不必顯式獲取panel本身,直接傳入self.frame即可遞歸向下查找
self.text2
=
xrc.XRCCTRL(self.frame,
'
text2
'
)
#
獲取控件ID,參數為設計XRC文件時控件的name屬性值
self.id
=
xrc.XRCID(
'
button
'
)
4.綁定事件處理有兩種方式:
a. 綁定按鍵事件:
self.button
=
xrc.XRCCTRL(self.panel,
'
button
'
)
self.frame.Bind(wx.EVT_BUTTON, self.OnSubmit, self.button)
b. 因為xrc.XRCCTRL僅能返回wx.Window的派生類,而wxMenuItem不是派生自wx.Window,不能采用xrc.XRCCTRL 獲取菜單項,因此事件必須委托給Frame綁定。派生自wx.Window的按鍵等控件也可以采用本方法綁定:
self.frame.Bind(wx.EVT_BUTTON, self.OnSubmit, id
=
xrc.XRCID(
'
button
'
))
動態創建
加載Frame窗體時將自動加載其子控件和子窗體,那么,你如何控制子窗體和子控件的加載呢?為此,你必須將子窗體定義為和窗體節體平行的頂級節點 (Frames、Dialogs、Panels、Toolbars、Menus和MenuBars可以作為頂級節點),并通過程序控制加載。如下例:
dynamic.xrc文件:
<?
xml version="1.0" encoding="utf-8"
?>
<
resource
>
<
object
class
="wxFrame"
name
="mainFrame"
>
<
title
>
Primary Frame
</
title
>
<
object
class
="wxPanel"
name
="mainPanel"
>
<
object
class
="wxButton"
name
="button"
>
<
label
>
New Frame
</
label
>
</
object
>
</
object
>
</
object
>
<
object
class
="wxFrame"
name
="nextFrame"
>
<
title
>
Secondary Frame
</
title
>
<
object
class
="wxPanel"
name
="nextPanel"
>
<
object
class
="wxStaticText"
name
="label"
>
<
label
>
This is a dynamically created frame.
</
label
>
</
object
>
</
object
>
</
object
>
</
resource
>
Python源文件:
import
wx
from
wx
import
xrc
class
MyApp(wx.App):
def
OnInit(self):
self.res
=
xrc.XmlResource(
'
dynamic.xrc
'
)
self.init_frame()
return
True
def
init_frame(self):
self.frame
=
self.res.LoadFrame(None,
'
mainFrame
'
)
self.panel
=
xrc.XRCCTRL(self.frame,
'
mainPanel
'
)
self.button
=
xrc.XRCCTRL(self.panel,
'
button
'
)
self.frame.Bind(wx.EVT_BUTTON, self.OnNewFrame, self.button)
self.frame.Show()
def
OnNewFrame(self, evt):
self.frame2
=
self.res.LoadFrame(None,
'
nextFrame
'
)
self.frame2.Show()
if
__name__
==
'
__main__
'
:
app
=
MyApp(False)
app.MainLoop()
動態添加子控件時必須首先調用父窗口的GetSizer方法,創建控件后添加到Sizer,并調用Sizer的Fit方法為控件留出顯示空間:
MainWindow
=
res.LoadFrame(None,
"
frame_1
"
)
my_sizer
=
MainWindow.GetSizer()
my_text
=
wx.TextCtrl(MainWindow,
-
1
,
"
Test
"
, size
=
(
325
,
200
))
my_sizer.Add(my_text,
1
, wx.EXPAND
|
wx.ADJUST_MINSIZE, 0)
my_sizer.Fit(MainWindow)
posted on 2008-03-24 13:52
金慶
閱讀(4848)
評論(1)
編輯
收藏
引用
所屬分類:
6. Python
評論
#
re: XRC初步
2008-08-29 14:23
songgod
請教一下你知道如何解決wxglade導出xrc文件時候不支持中文的問題,編碼用utf-8也不行,而且都也不支持gb2312編碼。如果看到請聯系我:sgd_33@163.com
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
vs2017 linux 編譯輸出改成 vs 格式
xlsx批量轉為utf8的csv
如何運行 rpcz python example
Windows上Python讀取stdin出錯
建立Socket Policy服務器
python計算24點
(Python編程)Pickle對象
Boost.Python中文文檔下載
用Boost.Python構建混合系統
Python封裝的性能研究
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © 金慶
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
欧美顶级大胆免费视频
|
欧美一区二区免费视频
|
久久久91精品国产一区二区三区
|
一区二区三区 在线观看视频
|
国产精品高潮呻吟久久av无限
|
136国产福利精品导航网址应用
|
日韩午夜精品视频
|
国产精品v欧美精品v日本精品动漫
|
久久综合婷婷
|
黄色工厂这里只有精品
|
久久se精品一区二区
|
欧美伊人久久久久久午夜久久久久
|
久久在线免费观看
|
亚洲香蕉网站
|
在线亚洲伦理
|
亚洲精华国产欧美
|
久久成人免费电影
|
午夜久久久久久
|
欧美不卡福利
|
99re6热在线精品视频播放速度
|
在线看日韩av
|
久久日韩粉嫩一区二区三区
|
亚洲欧美日韩一区二区三区在线
|
猫咪成人在线观看
|
亚洲一区二区成人
|
欧美在线啊v
|
欧美午夜a级限制福利片
|
av成人黄色
|
欧美韩国一区
|
亚洲国产精品嫩草影院
|
亚洲国产精品久久久
|
午夜精品一区二区三区电影天堂
|
久久www成人_看片免费不卡
|
国产精品视频免费
|
99视频国产精品免费观看
|
好看的日韩av电影
|
国产精品美女视频网站
|
久久国产精品久久国产精品
|
久久婷婷影院
|
欧美夜福利tv在线
|
亚洲欧美精品在线观看
|
欧美成人精品1314www
|
亚洲日韩中文字幕在线播放
|
99re6热在线精品视频播放速度
|
久久狠狠婷婷
|
午夜在线一区二区
|
亚洲精品在线免费观看视频
|
免费亚洲一区
|
在线一区欧美
|
欧美成人自拍视频
|
中国亚洲黄色
|
99re66热这里只有精品4
|
蜜臀久久99精品久久久画质超高清
|
亚洲在线中文字幕
|
在线一区二区日韩
|
亚洲免费观看视频
|
久久久久久夜精品精品免费
|
一区二区电影免费观看
|
久久蜜臀精品av
|
亚洲国产婷婷综合在线精品
|
久久综合色播五月
|
日韩午夜av电影
|
久久女同精品一区二区
|
免费成人黄色
|
欧美成人性网
|
欧美freesex8一10精品
|
中文在线一区
|
亚洲第一色在线
|
中国成人黄色视屏
|
一区二区三区成人精品
|
夜夜嗨av一区二区三区四季av
|
欧美黄色免费
|
亚洲一区二区三区视频
|
亚洲网站视频
|
国产精品久久久久av
|
很黄很黄激情成人
|
久久av一区二区三区
|
欧美二区在线观看
|
欧美在线看片
|
欧美欧美天天天天操
|
国产欧美日韩一区
|
亚洲综合色在线
|
久久欧美中文字幕
|
亚洲精品国精品久久99热一
|
亚洲国产高清高潮精品美女
|
亚洲高清视频一区
|
免费久久99精品国产
|
国产精品永久免费
|
久久一区精品
|
久久激情网站
|
国产精品久久久久久模特
|
久久久www
|
夜夜嗨av一区二区三区
|
久久久久高清
|
亚洲精品欧美
|
久久精品一区二区三区四区
|
免费看成人av
|
欧美成人午夜激情视频
|
韩国精品一区二区三区
|
99热免费精品
|
亚洲一区二区欧美日韩
|
国内综合精品午夜久久资源
|
亚洲五月六月
|
欧美激情1区2区3区
|
欧美在现视频
|
亚洲理论在线观看
|
日韩一级精品视频在线观看
|
久久国产精品久久久久久
|
国产综合色一区二区三区
|
一区二区欧美亚洲
|
久久五月天婷婷
|
亚洲一区二区三区精品在线观看
|
亚洲精品一级
|
在线亚洲欧美专区二区
|
在线视频欧美精品
|
亚洲精品日韩久久
|
欧美日韩亚洲高清一区二区
|
另类图片综合电影
|
国产精品分类
|
亚洲日本无吗高清不卡
|
国内成人自拍视频
|
国产亚洲欧洲
|
老牛嫩草一区二区三区日本
|
欧美v国产在线一区二区三区
|
亚洲精选在线
|
国产日韩欧美自拍
|
性欧美暴力猛交另类hd
|
亚洲大片在线
|
欧美巨乳波霸
|
亚洲午夜在线视频
|
欧美黄色一区
|
国产精品99久久久久久久女警
|
亚洲福利视频在线
|
亚洲视频碰碰
|
久久久久国色av免费看影院
|
麻豆成人在线
|
午夜精品一区二区三区四区
|
欧美激情一区二区
|
欧美午夜理伦三级在线观看
|
亚洲日本免费
|
亚洲欧洲精品一区二区
|
欧美a级一区二区
|
最新国产精品拍自在线播放
|
亚洲午夜性刺激影院
|
裸体丰满少妇做受久久99精品
|
香蕉成人伊视频在线观看
|
欧美精品乱人伦久久久久久
|
欧美国产综合视频
|
性感少妇一区
|
亚洲激情在线观看视频免费
|
亚洲午夜在线观看视频在线
|
国产午夜精品久久
|
免费亚洲电影在线
|
久久超碰97中文字幕
|
亚洲二区精品
|
性色av一区二区怡红
|
国产精品网曝门
|
欧美激情亚洲一区
|
噜噜噜久久亚洲精品国产品小说
|
亚洲私人影吧
|
亚洲欧美韩国
|
欧美一区二区私人影院日本
|
欧美亚洲免费高清在线观看
|
欧美电影在线
|
亚洲国产日韩美
|
亚洲电影在线
|
欧美国产欧美亚州国产日韩mv天天看完整
|
亚洲国产精品专区久久
|
欧美精品一区二区三
|
国产精品成人一区
|
国产在线国偷精品产拍免费yy
|
国产精品自拍小视频
|
欧美日韩色综合
|
男男成人高潮片免费网站
|
欧美不卡在线视频
|
在线亚洲欧美视频
|
中文成人激情娱乐网
|
亚洲在线成人精品
|
久久精品99国产精品酒店日本
|
一区二区免费看
|
91久久久久久国产精品
|
欧美激情乱人伦
|
欧美大片va欧美在线播放
|
久久夜色精品国产欧美乱
|
美女黄毛**国产精品啪啪
|
欧美激情偷拍
|
亚洲一区二区精品在线观看
|
激情欧美一区二区三区在线观看
|
久久久免费观看视频
|
欧美激情精品久久久久久久变态
|
国产精品久久久久aaaa樱花
|
欧美精品色综合
|
国产欧美一区二区在线观看
|
欧美大片免费观看
|
在线色欧美三级视频
|
欧美一区二区三区婷婷月色
|
亚洲欧美国产视频
|
欧美在线free
|
国产亚洲精品久久久久婷婷瑜伽
|
亚洲一区二区不卡免费
|