十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
首先要確定你的onCreateOptionsMenu()方法和onOptionsItemselected()方式是重寫父類的
公司主營業(yè)務(wù):網(wǎng)站制作、成都網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出金壇免費做網(wǎng)站回饋大家。
如果你的菜單按鈕沒有執(zhí)行內(nèi)容,那么你點擊的時候會默認自動關(guān)掉。如果按鈕里的代碼出現(xiàn)了問題,當你在點擊的時候,就會出彈出框,告訴你程序已停止,代碼出現(xiàn)異常。想查看異常信息,可以到eclipse切換窗口到DDMS--LogCat里查看異常信息
深入淺出這本書比較簡單,只是講了一個小例子。想深入學(xué)習(xí)的話,推薦你去看創(chuàng)新辦公室的視頻,將的比較透徹。你去百度搜搜他們的網(wǎng)址。我忘記了
'''Tkinter教程之OptionMenu篇'''
#OptionMenu為可選菜單,與Combox功能類似。
'''1.創(chuàng)建OptionMenu'''
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar(root)
v.set('Python')
om = OptionMenu(root,v,'Python','PHP','CPP','C','Java','JavaScript','VBScript')
om.pack()
root.mainloop()
#顯示的文本自動斷行,上下行分別使用了左對齊,右對齊和居中對齊
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar(root)
#創(chuàng)建一個OptionMenu控件
om = OptionMenu(root,
v,
'Python',
'PHP',
'CPP',
'C',
'Java',
'JavaScript',
'VBScript'
)
om.pack()
root.mainloop()
#OptionMenu的創(chuàng)建需要兩個必要的參數(shù),與當前值綁定的變量,通常為一StringVar類型;另一
#個是提供可選的內(nèi)容列表,由OptionMenu的變參數(shù)指定。
'''2.設(shè)置OptionMenu的顯示值'''
#當OptionMenu與變量綁定后,直接使用變量賦值的方法即可改變當前的值
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar(root)
v.set('VBScript')
#創(chuàng)建一個OptionMenu控件
om = OptionMenu(root,
v,
'Python',
'PHP',
'CPP',
'C',
'Java',
'JavaScript',
'VBScript'
)
om.pack()
print v.get()
root.mainloop()
#運行程序,OptionMenu默認值為"VBScript",打印出的數(shù)值也為"VBScript"
#如果設(shè)置的值不包含在當前的列表中,會是什么結(jié)果?如下的代碼使用"Tkinter"來測試
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar(root)
v.set('Tkinter')
#創(chuàng)建一個OptionMenu控件
om = OptionMenu(root,
v,
'Python',
'PHP',
'CPP',
'C',
'Java',
'JavaScript',
'VBScript'
)
om.pack()
print v.get()
root.mainloop()
#程序依舊是默認值改變?yōu)門kinter,打印結(jié)果也變?yōu)門kinter,但Tkinter不會添加到OptionMenu的列表中,也就是說,當選擇其它的選項時,Tkinter的值會丟失。
'''3.打印OptionMenu的值'''
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar(root)
v.set('Tkinter')
def printOption(event):
print v.get()
#創(chuàng)建一個OptionMenu控件
om = OptionMenu(root,
v,
'Python',
'PHP',
'CPP',
'C',
'Java',
'JavaScript',
'VBScript'
)
om.bind('Button-1',printOption)
om.pack()
root.mainloop()
#每次點擊OptionMenu程序打印出上次選中的項值
'''使用list作為OptionMenu的選項'''
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
Lang = ['Python','PHP','CPP','C','Java','JavaScript','VBScript']
v = StringVar(root)
v.set('Tkinter')
def printOption(event):
print v.get()
#創(chuàng)建一個OptionMenu控件,使用了apply函數(shù)
om = apply(OptionMenu,(root,v) + tuple(Lang))
om.bind('Button-1',printOption)
om.pack()
root.mainloop() =================================================================='''Tkinter教程之Grid篇'''
# Tkinter參考中最推薦使用的一個布局器。實現(xiàn)機制是將Widget邏輯上分割成表格,在指定的位置放置想要的Widget就可以了。
'''1.第一個Grid例子'''
# -*- coding: cp936 -*-
# 使用grid來布局組件
from Tkinter import *
root = Tk()
# 創(chuàng)建兩個Label
lb1 = Label(root,text = 'Hello')
lb2 = Label(root,text = 'Grid')
lb1.grid()
lb2.grid()
root.mainloop()
# grid有兩個最為重要的參數(shù),用來指定將組件放置到什么位置,一個是row,另一個是column。如果不指定row,會將組件放置到第一個可用的行上,如果不指定column,則使用第一列。
'''2.使用row和column來指定位置'''
# -*- coding: cp936 -*-
# 使用grid來布局組件
from Tkinter import *
root = Tk()
# 創(chuàng)建兩個Label
lb1 = Label(root,text = 'Hello')
lb2 = Label(root,text = 'Grid')
lb1.grid()
# 指定lb2為第一行(使用索引0開始),第二列(使用索引0開始)
lb2.grid(row = 0,column = 1)
root.mainloop()
# grid有兩個最為重要的參數(shù),用來指定將組件放置到什么位置,一個是row,另一個是column。如果不指定row,會將組件放置到第一個可用的行上,如果不指定column,則使用第一列。注意這里使用grid時不需要創(chuàng)建,直接使用行列就可以。
'''3.為其它組件預(yù)定位置'''
# 可以使用row/column來指定組件的放置位置,并預(yù)先留出空間,以務(wù)其它需要。
# -*- coding: cp936 -*-
# 使用grid來布局組件
from Tkinter import *
root = Tk()
# 創(chuàng)建兩個Label
Label(root,text = 'Hello').pack()
# 在第一行,第10列放置lb2
Label(root,text = 'Grid').grid(row = 0,column = 10)
# Lable(root,text = '3').grid(row = 0,column = 5)
root.mainloop()
# 這個例子中將lb2放置到第1行,第11列位置上,但運行結(jié)果與上一例從效果上看不出太大的區(qū)別。原因是:如果這個位置沒有組件的話,它是看不可見的。
'''4.將組件放置到預(yù)定位置上去'''
# -*- coding: cp936 -*-
# 使用grid來布局組件
from Tkinter import *
root = Tk()
# 創(chuàng)建兩個Label
Label(root,text = '1').grid()
# 在第1行,第11列放置lb2
Label(root,text = '2').grid(row = 0,column = 10)
Label(root,text = '3').grid(row = 0,column = 5)
root.mainloop()
# 可以看到Label('3')是位置Label('1')和Label('2')之間了,即Label('2')是在11列,Label('3')位于第3列
'''5.將兩個或多個組件同一個位置'''
# -*- coding: cp936 -*-
# 多個組件同時grid到同一個表格位置
from Tkinter import *
root = Tk()
# 創(chuàng)建兩個Label
lb1 = Label(root,text = '1')
lb2 = Label(root,text = '2')
# 將lb1和lb2均grid到(0,0)位置
lb1.grid(row = 0,column = 0)
lb2.grid(row = 0,column = 0)
def forgetLabel():
# grid_slaves返回grid中(0,0)位置的所有組件
# grid_forget將這個組件從grid中移除(并未刪除,可以使用grid再將它顯示出來)
print root.grid_slaves(0,0)[0].grid_forget()
# 我測試時grid_salves返回的第一個值為lb2,最后grid的那一個
Button(root,text = 'forget last',command = forgetLabel).grid(row = 1)
root.mainloop()
# 這段代碼是用來證明,多個組件同時放置到同一個位置上會產(chǎn)生覆蓋的問題。對于grid_slaves返回的組件list如何排序,我沒有去查想著資料,在這個例子中使用索引0,返回的正好是lb2,然后再使用grid_forget將這個刪除從grid中移除,可以看到lb1顯示出來了。
'''6.改變列(行)的屬性值'''
# -*- coding: cp936 -*-
# 設(shè)置column的屬性(columnconfigure)
from Tkinter import *
root = Tk()
# 創(chuàng)建兩個Label
lb1 = Label(root,text = '1',bg = 'red')
lb2 = Label(root,text = '2',bg = 'blue')
# 將lb1和lb2分別放置到第1行的1,2列位置上
lb1.grid(row = 0,column = 0)
lb2.grid(row = 0,column = 1)
# 指定列的最小寬度為100
root.columnconfigure(0,minsize = 100)
root.mainloop()
# 1與2的距離變的遠一些了。
# 但如果這個位置沒有組件存在的話這個值是不起作用的.
# 設(shè)置列或行(rowconfigure)的屬性時使用父容器的方法,不是自己調(diào)用。
'''7.組件使用多列(多行)'''
# -*- coding: cp936 -*-
# 使用多行(多列)
from Tkinter import *
root = Tk()
# 創(chuàng)建如下布局(一個字符占用一個grid位置)
# A E
# B C
# D
# A占用(0,0)(0,1),B占用(1,0),C占用(1,1),D占用(2,0),E占用(0,2)
# 創(chuàng)建5個Label,分別以背景色區(qū)別
lbA = Label(root,text = 'A',bg = 'red')
lbB = Label(root,text = 'B',bg = 'blue')
lbC = Label(root,text = 'C',bg = 'red')
lbD = Label(root,text = 'D',bg = 'blue')
lbE = Label(root,text = 'E',bg = 'blue')
# 以下為布局參數(shù)設(shè)置
lbA.grid(row = 0,column = 0,columnspan = 2)
lbB.grid(row = 1,column = 0)
lbC.grid(row = 1,column = 1)
lbD.grid(row = 2)
lbE.grid(row = 0,column = 2)
root.mainloop()
# A與B、D的區(qū)別,它左邊已改變,由于使用了兩個表格;
# C與E的區(qū)別:C的右邊與E的左邊對齊,也就是說E被放置到第2列的下一個位置了,原因由于A已使用了第2列。
'''8.設(shè)置表格中組件的對齊屬性'''
# -*- coding: cp936 -*-
# 使用sticky設(shè)置對齊方式
from Tkinter import *
root = Tk()
# 創(chuàng)建兩個Label
Label(root,text = 'hello sticky').grid()
Label(root,text = 'Tkinter').grid()
# 創(chuàng)建兩個Label,并指定sticky屬性
Label(root,text = 'hello sticky').grid(sticky = W)
Label(root,text = 'Tkinter').grid(sticky = W)
root.mainloop()
# 默認屬性下,組件的對齊方式為居中,設(shè)置sticky屬性可以控制對齊方式,可用的值(N,S,E,W)及其組合值
函數(shù) void menu(void){ ...} 定義出現(xiàn)在 main(){} 函數(shù)以后,語法規(guī)定,在 main() 以前 必須 有 函數(shù)原型聲明,而你沒有寫。
于是 主函數(shù)里 出現(xiàn) 的 menu();編譯器 認為 是 函數(shù)原型聲明。 按語法,略寫 函數(shù)類型的 則處理 為整型,沒有形參的 處理為 void. 這就 出現(xiàn) 了 說 你 重復(fù)定義了 menu() 函數(shù),且 類型 改變 了 (前一個是整型,后一個是 void 型)。
所以,你只要在 main() 以前,加上 函數(shù)原型聲明 void menu(void); 編譯器就不會 誤解了。
你好,你的self.root是在init函數(shù)里面才定義的class本身沒有root這個成員,你可以將self.root那行刪除。
然后在class windows里面增加一個對root的定義
root = tkinter.Tk()
#?coding:?utf-8
menu?=?{
'1':?dict(name='草莓冰淇淋',?price=20),
'2':?dict(name='香草冰淇淋',?price=10),
'3':?dict(name='香蕉冰淇淋',?price=15),
'5':?dict(name='巧克力冰淇淋',?price=30),
}
def?showmenu(menu):
for?k,?item?in?sorted(menu.items()):
print?"%(key)s:?%(name)s?價格%(price).2f"?%?dict(key=k,?**item)
def?menuchoice(menu):
while?True:
showmenu(menu)
c?=?raw_input("Your?Choice('.'?for?end):?")
if?c?==?'.':
break
else:
yield?menu.get(c)
customerchoice?=?filter(None,?menuchoice(menu))
print?"Total:?%.2f"?%?sum(map(lambda?x:?x["price"],?customerchoice))