1. python Tkinter庫之OptionMenu控制項問題
'''Tkinter教程之OptionMenu篇'''
#OptionMenu為可選菜單,與Combox功能類似。
'''1.創建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)
#創建一個OptionMenu控制項
om = OptionMenu(root,
v,
'Python',
'PHP',
'CPP',
'C',
'Java',
'JavaScript',
'VBScript'
)
om.pack()
root.mainloop()
#OptionMenu的創建需要兩個必要的參數,與當前值綁定的變數,通常為一StringVar類型;另一
#個是提供可選的內容列表,由OptionMenu的變參數指定。
'''2.設置OptionMenu的顯示值'''
#當OptionMenu與變數綁定後,直接使用變數賦值的方法即可改變當前的值
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar(root)
v.set('VBScript')
#創建一個OptionMenu控制項
om = OptionMenu(root,
v,
'Python',
'PHP',
'CPP',
'C',
'Java',
'JavaScript',
'VBScript'
)
om.pack()
print v.get()
root.mainloop()
#運行程序,OptionMenu默認值為"VBScript",列印出的數值也為"VBScript"
#如果設置的值不包含在當前的列表中,會是什麼結果?如下的代碼使用"Tkinter"來測試
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar(root)
v.set('Tkinter')
#創建一個OptionMenu控制項
om = OptionMenu(root,
v,
'Python',
'PHP',
'CPP',
'C',
'Java',
'JavaScript',
'VBScript'
)
om.pack()
print v.get()
root.mainloop()
#程序依舊是默認值改變為Tkinter,列印結果也變為Tkinter,但Tkinter不會添加到OptionMenu的列表中,也就是說,當選擇其它的選項時,Tkinter的值會丟失。
'''3.列印OptionMenu的值'''
# -*- coding: cp936 -*-
from Tkinter import *
root = Tk()
v = StringVar(root)
v.set('Tkinter')
def printOption(event):
print v.get()
#創建一個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()
#創建一個OptionMenu控制項,使用了apply函數
om = apply(OptionMenu,(root,v) + tuple(Lang))
om.bind('<Button-1>',printOption)
om.pack()
root.mainloop() =================================================================='''Tkinter教程之Grid篇'''
# Tkinter參考中最推薦使用的一個布局器。實現機制是將Widget邏輯上分割成表格,在指定的位置放置想要的Widget就可以了。
'''1.第一個Grid例子'''
# -*- coding: cp936 -*-
# 使用grid來布局組件
from Tkinter import *
root = Tk()
# 創建兩個Label
lb1 = Label(root,text = 'Hello')
lb2 = Label(root,text = 'Grid')
lb1.grid()
lb2.grid()
root.mainloop()
# grid有兩個最為重要的參數,用來指定將組件放置到什麼位置,一個是row,另一個是column。如果不指定row,會將組件放置到第一個可用的行上,如果不指定column,則使用第一列。
'''2.使用row和column來指定位置'''
# -*- coding: cp936 -*-
# 使用grid來布局組件
from Tkinter import *
root = Tk()
# 創建兩個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有兩個最為重要的參數,用來指定將組件放置到什麼位置,一個是row,另一個是column。如果不指定row,會將組件放置到第一個可用的行上,如果不指定column,則使用第一列。注意這里使用grid時不需要創建,直接使用行列就可以。
'''3.為其它組件預定位置'''
# 可以使用row/column來指定組件的放置位置,並預先留出空間,以務其它需要。
# -*- coding: cp936 -*-
# 使用grid來布局組件
from Tkinter import *
root = Tk()
# 創建兩個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列位置上,但運行結果與上一例從效果上看不出太大的區別。原因是:如果這個位置沒有組件的話,它是看不可見的。
'''4.將組件放置到預定位置上去'''
# -*- coding: cp936 -*-
# 使用grid來布局組件
from Tkinter import *
root = Tk()
# 創建兩個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()
# 創建兩個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()
# 這段代碼是用來證明,多個組件同時放置到同一個位置上會產生覆蓋的問題。對於grid_slaves返回的組件list如何排序,我沒有去查想著資料,在這個例子中使用索引0,返回的正好是lb2,然後再使用grid_forget將這個刪除從grid中移除,可以看到lb1顯示出來了。
'''6.改變列(行)的屬性值'''
# -*- coding: cp936 -*-
# 設置column的屬性(columnconfigure)
from Tkinter import *
root = Tk()
# 創建兩個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的距離變的遠一些了。
# 但如果這個位置沒有組件存在的話這個值是不起作用的.
# 設置列或行(rowconfigure)的屬性時使用父容器的方法,不是自己調用。
'''7.組件使用多列(多行)'''
# -*- coding: cp936 -*-
# 使用多行(多列)
from Tkinter import *
root = Tk()
# 創建如下布局(一個字元佔用一個grid位置)
# A E
# B C
# D
# A佔用(0,0)(0,1),B佔用(1,0),C佔用(1,1),D佔用(2,0),E佔用(0,2)
# 創建5個Label,分別以背景色區別
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')
# 以下為布局參數設置
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的區別,它左邊已改變,由於使用了兩個表格;
# C與E的區別:C的右邊與E的左邊對齊,也就是說E被放置到第2列的下一個位置了,原因由於A已使用了第2列。
'''8.設置表格中組件的對齊屬性'''
# -*- coding: cp936 -*-
# 使用sticky設置對齊方式
from Tkinter import *
root = Tk()
# 創建兩個Label
Label(root,text = 'hello sticky').grid()
Label(root,text = 'Tkinter').grid()
# 創建兩個Label,並指定sticky屬性
Label(root,text = 'hello sticky').grid(sticky = W)
Label(root,text = 'Tkinter').grid(sticky = W)
root.mainloop()
# 默認屬性下,組件的對齊方式為居中,設置sticky屬性可以控制對齊方式,可用的值(N,S,E,W)及其組合值
2. Python中的tkinter插件的listbox如何實現點擊按鈕後數據一行一行循環顯示,
那幹嘛要用listbox?
3. python圖形化界面設計tkinter
python提供了多個圖形開發界面的庫,幾個常用Python GUI庫如下:
Tkinter:Tkinter模塊("Tk 介面")是Python的標准Tk GUI工具包的介面.Tk和Tkinter可以在大多數的Unix平台下使用,同樣可以應用在Windows和Macintosh系統里.,Tk8.0的後續版本可以實現本地窗口風格,並良好地運行在絕大多數平台中。
wxPython:wxPython 是一款開源軟體,是 Python 語言的一套優秀的 GUI 圖形庫,允許 Python 程序員很方便的創建完整的、功能鍵全的 GUI 用戶界面。
Jython:Jython程序可以和Java無縫集成。除了一些標准模塊,Jython使用Java的模塊。Jython幾乎擁有標準的Python中不依賴於C語言的全部模塊。比如,Jython的用戶界面將使用Swing,AWT或者SWT。Jython可以被動態或靜態地編譯成Java位元組碼。
Tkinter 編程
Tkinter 是Python的標准GUI庫。Python使用Tkinter可以快速的創建GUI應用程序。
由於Tkinter是內置到python的安裝包中、只要安裝好Python之後就能import Tkinter庫、而且IDLE也是用Tkinter編寫而成、對於簡單的圖形界面Tkinter還是能應付自如。
創建一個GUI程序
1、導入Tkinter模塊
2、創建控制項
3、指定這個控制項的master, 即這個控制項屬於哪一個
4、告訴GM(geometry manager)有一個控制項產生了。
實例:
Tkinter 組件
Tkinter的提供各種控制項,如按鈕,標簽和文本框,一個GUI應用程序中使用。這些控制項通常被稱為控制項或者部件。
目前有15種Tkinter的部件。我們提出這些部件以及一個簡短的介紹,在下面的表:
控制項
描述
Button 按鈕控制項;在程序中顯示按鈕。
Canvas 畫布控制項;顯示圖形元素如線條或文本
Checkbutton 多選框控制項;用於在程序中提供多項選擇框
Entry 輸入控制項;用於顯示簡單的文本內容
Frame 框架控制項;在屏幕上顯示一個矩形區域,多用來作為容器
Label 標簽控制項;可以顯示文本和點陣圖
Listbox 列表框控制項;在Listbox窗口小部件是用來顯示一個字元串列表給用戶
Menubutton 菜單按鈕控制項,由於顯示菜單項。
Menu 菜單控制項;顯示菜單欄,下拉菜單和彈出菜單
Message 消息控制項;用來顯示多行文本,與label比較類似
Radiobutton 單選按鈕控制項;顯示一個單選的按鈕狀態
Scale 范圍控制項;顯示一個數值刻度,為輸出限定范圍的數字區間
Scrollbar 滾動條控制項,當內容超過可視化區域時使用,如列表框。.
Text 文本控制項;用於顯示多行文本
Toplevel 容器控制項;用來提供一個單獨的對話框,和Frame比較類似
Spinbox 輸入控制項;與Entry類似,但是可以指定輸入范圍值
PanedWindow PanedWindow是一個窗口布局管理的插件,可以包含一個或者多個子控制項。
LabelFrame labelframe 是一個簡單的容器控制項。常用與復雜的窗口布局。
tkMessageBox 用於顯示你應用程序的消息框。
標准屬性
標准屬性也就是所有控制項的共同屬性,如大小,字體和顏色等等。
屬性 描述
Dimension 控制項大小;
Color 控制項顏色;
Font 控制項字體;
Anchor 錨點;
Relief 控制項樣式;
Bitmap 點陣圖;
Cursor 游標;
幾何管理
Tkinter控制項有特定的幾何狀態管理方法,管理整個控制項區域組織,一下是Tkinter公開的幾何管理類:包、網格、位置
幾何方法 描述
pack() 包裝;
grid() 網格
place() 位置
4. 請教python+tkinter如何實現下拉日歷
有一個替代的方法,用ttk.combobox做成下拉列表的形式「2014-02-24」,初始值為當天的日期,緊接著是從今天到後20天的日期,
python+tkinter本身並不帶日歷控制項。
5. python中tkinter treeview如何獲取選中的條目
代碼如下(PS:為什麼源代碼功能沒了),請將#替換為空格:
import tkinter
from tkinter import ttk
def popup(event):
####print(tree.selection())
####string.set(tree.selection()[0])
####string.set(tree.focus())
win=tkinter.Tk()
tree=ttk.Treeview(win)
global string
string = tkinter.StringVar()
label=tkinter.Label(win, text="項目", textvariable=string)
myid=tree.insert("",0,"浙江",text="浙江",values=("1"))
myidx1=tree.insert(myid,0,"杭州",text="杭州",values=("2"))
myidx2=tree.insert(myid,1,"寧波",text="寧波",values=("3"))
myidy=tree.insert("",1,"山西",text="山西",values=("4"))
myidy1=tree.insert(myidy,0,"太原",text="太原",values=("5"))
myidy1=tree.insert(myidy,2,"大同",text="大同",values=("6"))
tree.bind("<ButtonRelease-1>", popup)
tree.pack()
label.pack()
win.mainloop()
6. pythion+tkinter如何讓列表裡的名字顯示在窗口中
摘要 geometry()參數的含義:
7. python tkinter 如何做一個如下所示的下拉菜單
Tkinter居然沒有這種組件,所以就只能模擬了
#! /usr/bin/python
# -*- coding: utf8 -*-
from Tkinter import *
class Select(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.label = Label(self, text="選擇項目")
self.listBox = Listbox(self, height=1)
self.button = Button(self, text='V', command=self.triggle)
self.hideList = True
for i in xrange(10):
self.listBox.insert(i, 'Item%d'%i)
self.label.grid(row=0, column=0, sticky=N)
self.listBox.grid(row=0, column=1, sticky=N)
self.button.grid(row=0, column=2, sticky=N)
self.grid()
def triggle(self):
self.hideList ^= 1
self.listBox.config(height=[self.listBox.size(), 1][self.hideList])
app = Select()
app.mainloop()
僅供參考。
8. 用Python tkinter 做一個圖形界面表格需要帶框架線
tkinter中可以用Treeview 顯示數據,相當於table
9. python tkinter 的下拉列表位置怎麼設置
你好,你應該用grid函數
comboxlist.grid(padx=50, pady=50) 這樣的話,就可以在x=50,y=50的地方了
10. python tkinter下拉列表菜單的位置怎麼設置
你好,那個grid函數的話,用row和column是不行的,你換一下用grid(padx=10,pady=20)來將位置設定在10,20的地方。