什么GUI?你說(shuō)的是python內(nèi)置的開(kāi)發(fā)編碼工具吧?python內(nèi)置了一個(gè)用Tkinter寫的IDE。叫做IDLE。那個(gè)就是在GUI環(huán)境下編輯調(diào)試python code的。你可以看看是不是?還有。你說(shuō)的pythonw.exe這個(gè)是用來(lái)運(yùn)行你用python寫的gui源碼。以window模式運(yùn)行。不會(huì)自動(dòng)彈出python終端。如果是用python.exe運(yùn)行的話就會(huì)默認(rèn)的現(xiàn)實(shí)python終端。用來(lái)查看gui操作后的變量、函數(shù)值。還有異常等等。還有什么問(wèn)題朋友你可以再補(bǔ)充一下。我能幫就幫。期待你的回復(fù)
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比倉(cāng)山網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式倉(cāng)山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋倉(cāng)山地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
安裝wxPython
下面是wxPython特別基礎(chǔ)的使用方法,將以一個(gè)小程序?yàn)槔齺?lái)說(shuō)明,它的功能是在一個(gè)文本框中輸入文件名,點(diǎn)擊open按鈕,會(huì)在另一個(gè)文本框中顯示其內(nèi)容,可以進(jìn)行修改,點(diǎn)擊save可以保存修改。
wxPython的使用簡(jiǎn)介
創(chuàng)建應(yīng)用程序?qū)ο螅簑x.App()
app=wx.App()
app.MainLoop()
窗口/框架:wx.Frame()
win=wx.Frame(None,title='example')
win.Show()
組件
按鈕:wx.Button()
關(guān)鍵字label設(shè)置標(biāo)簽:
btn=wx.Button(win,label='open')
綁定事件:
btn.Bind(wx.EVT_BUTTON,load)
文本控件:wx.TextCtrl()
關(guān)鍵字style有wx.TE_MULTILINE(垂直滾動(dòng)條),wx.HSXROLL(水平滾動(dòng)條):
filename=wx.TextCtrl(win,style=wx.TE_MULTILINE|wx.HSXROLL)
同時(shí)我們可以在讀取或者寫入其內(nèi)容:
filename.GetValue() ? ?filename.SetValue('string')
布局:使用尺寸器(sizer)
wx.BoxSizer的原理是創(chuàng)建一個(gè)箱子一樣的東西,只能橫著或者豎著放組件,一個(gè)一個(gè)的加進(jìn)去,除了基本大小外其余空間按比例分配。加完一行行的箱子后,創(chuàng)建一個(gè)豎著的箱子,將這些橫著的箱子(也可以是其他組件)加進(jìn)去。
*背景組件:wx.Panel()
以窗口為參數(shù)構(gòu)建,所有的組件依附其上,在設(shè)置完尺寸器后,使用bkg.SetSizer(box)
尺寸器的構(gòu)建函數(shù):wx.BoxSizer()
有一個(gè)決定它是垂直還是水平的參數(shù)(wx.HORIZONTAL水平,wx.VERTICAL垂直),默認(rèn)為水平。
box=wx.BoxSizer(wx.VERTICAL)
Add方法
proportion參數(shù)決定這個(gè)組件在剩余空間中的分配比例,flag參數(shù)有wx.EXPAND(會(huì)確保組件會(huì)擴(kuò)展到分配的空間里),wx.LEFT,wx.RIGHT,wx.TOP,wx.BOTTOM,wx.ALL(這五個(gè)決定邊框參數(shù)會(huì)應(yīng)用到那個(gè)邊),border參數(shù)會(huì)確定邊框的大小。
完整版的源代碼如下:
#coding=utf-8
import wx
#設(shè)置函數(shù)
def load(event):
f=open(filename.GetValue(),'r')
content.SetValue(f.read())
f.close()
def save(event):
f=open(filename.GetValue(),'w')
f.write(content.GetValue())
f.close()
app=wx.App()
win=wx.Frame(None,title='simple editor',size=(410,330))
bkg=wx.Panel(win)
loadbutton=wx.Button(bkg,label='Open')
loadbutton.Bind(wx.EVT_BUTTON,load)
savebutton=wx.Button(bkg,label='Save')
savebutton.Bind(wx.EVT_BUTTON,save)
filename=wx.TextCtrl(bkg)
content=wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)
hbox=wx.BoxSizer()
hbox.Add(filename,proportion=1,flag=wx.EXPAND)
hbox.Add(loadbutton,proportion=0,flag=wx.LEFT,border=5)
hbox.Add(savebutton,proportion=0,flag=wx.LEFT,border=5)
vbox=wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox,proportion=0,flag=wx.ALL,border=5)
vbox.Add(content,proportion=1,flag=wx.EXPAND|wx.ALL,border=5)
bkg.SetSizer(vbox)
win.Show()
app.MainLoop()`
可以用Bind方法
self.Bind(wx.EVT_BUTTON,self.OnAppend,button)
self是繼承frame的類
OnAppend是定義的事件函數(shù)
button是在frame里增加的按鈕
這里有詳細(xì)介紹
打開(kāi)cmd,用pip安裝。
msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)
msgbox() 顯示一個(gè)消息和提供一個(gè)"OK"按鈕,你可以指定任意的消息和標(biāo)題,你甚至可以重寫"OK"按鈕的內(nèi)容。 以下是 msgbox() 的實(shí)例函數(shù):
ccbox(msg='Shall I continue?', title=' ', choices=('Continue', 'Cancel'), image=None)
ccbox() 提供一個(gè)選擇:Continue 或者 Cancel,并相應(yīng)的返回 1(選中Continue)或者 0(選中Cancel)。注意 ccbox() 是返回整型的 1 或 0,不是布爾類型的 True 或 False。但你仍然可以這么寫:
buttonbox(msg='', title=' ', choices=('Button1', 'Button2', 'Button3'), image=None, root=None)
可以使用 buttonbox() 定義自己的一組按鈕,buttonbox() 會(huì)顯示一組你定義好的按鈕。
當(dāng)用戶點(diǎn)擊任意一個(gè)按鈕的時(shí)候,buttonbox() 返回按鈕的文本內(nèi)容。如果用戶取消取消或者關(guān)閉窗口,那么會(huì)返回默認(rèn)選項(xiàng)(第一個(gè)選項(xiàng))。請(qǐng)看例子:
indexbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)
基本跟上面一樣,區(qū)別就是當(dāng)用戶選擇第一個(gè)按鈕的時(shí)候返回序列號(hào)0,選擇第二個(gè)按鈕時(shí)候返回序列號(hào)1。
boolbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)
如果第一個(gè)按鈕被選中則返回 1,否則返回 0。
choicebox(msg='Pick something.', title=' ', choices=())
按鈕組件方便提供用戶一個(gè)簡(jiǎn)單的按鈕選項(xiàng),但如果有很多選項(xiàng),或者選項(xiàng)的內(nèi)容特別長(zhǎng)的話,更好的策略是為它們提供一個(gè)可選擇的列表。
choicebox() 為用戶提供了一個(gè)可選擇的列表,使用序列(元祖或列表)作為選項(xiàng),這些選項(xiàng)顯示前會(huì)按照不區(qū)分大小寫的方法排好序。
另外還可以使用鍵盤來(lái)選擇其中一個(gè)選項(xiàng)(比較糾結(jié),但一點(diǎn)兒都不重要):
例如當(dāng)按下鍵盤上的"g"鍵,將會(huì)選中的第一個(gè)以"g"開(kāi)頭的選項(xiàng)。
再次按下"g"鍵,則會(huì)選中下一個(gè)以"g"開(kāi)頭的選項(xiàng)。
在選中最后一個(gè)以"g"開(kāi)頭的選項(xiàng)的時(shí)候,再次按下"g"鍵將重新回到在列表的開(kāi)頭的第一個(gè)以"g"開(kāi)頭的選項(xiàng)。
如果選項(xiàng)中沒(méi)有以"g"開(kāi)頭的,則會(huì)選中字符排序在"g"之前("f")的那個(gè)字符開(kāi)頭的選項(xiàng)。
如果選項(xiàng)中沒(méi)有字符的排序在"g"之前的,那么在列表中第一個(gè)元素將會(huì)被選中。
multchoicebox(msg='Pick as many items as you like.', title=' ', choices=(), **kwargs)
multchoicebox() 函數(shù)也是提供一個(gè)可選擇的列表,與 choicebox() 不同的是,multchoicebox() 支持用戶選擇 0 個(gè),1 個(gè)或者同時(shí)選擇多個(gè)選項(xiàng)。
multchoicebox() 函數(shù)也是使用序列(元祖或列表)作為選項(xiàng),這些選項(xiàng)顯示前會(huì)按照不區(qū)分大小寫的方法排好序。
enterbox(msg='Enter something.', title=' ', default='', strip=True, image=None, root=None)
enterbox() 為用戶提供一個(gè)最簡(jiǎn)單的輸入框,返回值為用戶輸入的字符串。
默認(rèn)返回的值會(huì)自動(dòng)去除首尾的空格,如果需要保留首尾空格的話請(qǐng)?jiān)O(shè)置參數(shù) strip=False。
integerbox(msg='', title=' ', default='', lowerbound=0, upperbound=99, image=None, root=None, **invalidKeywordArguments)
integerbox() 為用戶提供一個(gè)簡(jiǎn)單的輸入框,用戶只能輸入范圍內(nèi)(lowerbound參數(shù)設(shè)置最小值,upperbound參數(shù)設(shè)置最大值)的整型數(shù)值,否則會(huì)要求用戶重新輸入。
multenterbox(msg='Fill in values for the fields.', title=' ', fields=(), values=())
multenterbox() 為用戶提供多個(gè)簡(jiǎn)單的輸入框,要注意以下幾點(diǎn):
如果用戶輸入的值比選項(xiàng)少的話,則返回列表中的值用空字符串填充用戶為輸入的選項(xiàng)。
如果用戶輸入的值比選項(xiàng)多的話,則返回的列表中的值將截?cái)酁檫x項(xiàng)的數(shù)量。
如果用戶取消操作,則返回域中的列表的值或者None值
multpasswordbox(msg='Fill in values for the fields.', title=' ', fields=(), values=())
multpasswordbox() 跟 multenterbox() 使用相同的接口,但當(dāng)它顯示的時(shí)候,最后一個(gè)輸入框顯示為密碼的形式("*"):
textbox(msg='', title=' ', text='', codebox=0)
textbox() 函數(shù)默認(rèn)會(huì)以比例字體(參數(shù) codebox=1 設(shè)置為等寬字體)來(lái)顯示文本內(nèi)容(會(huì)自動(dòng)換行哦),這個(gè)函數(shù)適合用于顯示一般的書面文字。
注:text 參數(shù)(第三個(gè)參數(shù))可以是字符串類型,列表類型,或者元祖類型。
diropenbox(msg='',title='',default='')
該函數(shù)用于提供一個(gè)對(duì)話框,返回用戶選擇的目錄名,該目錄名是帶有完整的路徑的
選擇Cancel的話,返回值默認(rèn)為None
嗯,怎么說(shuō)呢。每一個(gè)gui程序都有一個(gè)稱為頂層(toplevel)的窗口管理器用于管理那些窗口部件,如按鈕,輸入框之類的,這個(gè)窗口管理器就是這些下級(jí)部件的master,頂級(jí)窗口的master是None即,它自己管理自己。
回到你的問(wèn)題,(1)第4行的master=None是表示Application這個(gè)類的master默認(rèn)為None,即它是頂層窗口。
(2)第13行中的app.master是返回當(dāng)前頂層窗口的對(duì)象,然后再調(diào)用title這個(gè)方法設(shè)置title,master=None只是表明app是頂層窗口而已。
我自己理解的。