網(wǎng)站建設(shè)實(shí)錄活動(dòng)推廣宣傳方案
一、說明
????????python在用戶界面開發(fā)中,其中有QT5,和Tkinter;對(duì)于實(shí)際項(xiàng)目,界面需要高大上,因此用QT5,對(duì)于開發(fā)人員的演示程序,或簡單程序中,不建議QT5;用Tkinter已經(jīng)足夠。本文做一個(gè)Tkinter練習(xí),將最基本的功能實(shí)現(xiàn)起來,就是花費(fèi)少的時(shí)間,實(shí)現(xiàn)更多的效益。
二、最基本窗口實(shí)現(xiàn)
2.1 導(dǎo)入程序包
?包導(dǎo)入
from tkinter import *
from tkinter import ttk
2.2 窗口、應(yīng)用、隱窗口?
????????作為Tkinter的窗口,由兩個(gè)方面組成:顯式Frame窗口,隱式窗口;還有應(yīng)用實(shí)體作為總體,如圖所示:
????????程序中顯式Frame窗口,隱式窗口;應(yīng)用實(shí)體三者的關(guān)系是:
- 程序中至少有一個(gè)app(也就是root)
- 程序中至少有一個(gè)Frame
- Frame是可以看見的對(duì)象,隱窗口是可見窗口的屬性參數(shù)。
- 設(shè)定Frame的屬性,需要通過app(root)訪問。
- 隱含窗口不是對(duì)象,不需要專門生成。
2.3 顯式生成root和Frame
root = Tk()
frm = ttk.Frame(root, padding=10)
frm.grid()
root.geometry("300x300")
root.mainloop()
2.4 隱含root生成窗口
frm = ttk.Frame(None)
frm.master.title('Sample application')
frm.master.geometry("300x300")
frm.mainloop()
2.5 加點(diǎn)小控件
?
from tkinter import *
from tkinter import ttk
root = Tk()
frm = ttk.Frame(root, padding=10)
frm.grid()
root.geometry("300x300")
ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)
root.mainloop()
2.6 封裝的窗口
?#!/usr/bin/env python 1
import Tkinter as tk 2class Application(tk.Frame): 3def __init__(self, master=None):tk.Frame.__init__(self, master) 4self.grid() 5self.createWidgets()def createWidgets(self):self.quitButton = tk.Button(self, text='Quit',command=self.quit) 6self.quitButton.grid() 7app = Application() 8
app.master.title('Sample application') 9
app.master.geometry("300x300") 10
app.mainloop()?
三、關(guān)于小控件
3.1 實(shí)現(xiàn)一個(gè)完整窗口
????????首先設(shè)計(jì)一個(gè)窗口,將Frame和widget的布局設(shè)計(jì)好,如下圖:
3.2 實(shí)現(xiàn)窗口
語句 | 含義 |
---|---|
master = Tk() | # 生成Tkinter主窗口 |
l1 = Label(master, text="Height") l2 = Label(master, text="Width") | 生成文字標(biāo)簽對(duì)象,根是主窗 |
l1.grid(row=0, column=0, sticky=W, pady=2) l2.grid(row=1, column=0, sticky=W, pady=2) | # grid 方法分別排列標(biāo)簽 # 指定的行和列, # sticky是控件在cell的擺放見下面。 |
e1 = Entry(master) | # 條目小部件,用于從用戶那里獲取條目 |
e1.grid(row=0, column=1, pady=2) e2.grid(row=1, column=1, pady=2) | # 這將排列條目小部件 |
e1 = Entry(master) e2 = Entry(master) | # 條目小部件,用于從用戶那里獲取條目 |
img = PhotoImage(file= "prize.png") | # 添加圖像(記住圖像應(yīng)該是 PNG 而不是 JPG) |
Label(master, image=img1).grid(row=0, column=2, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?columnspan=2, rowspan=2, padx=5, pady=5) | # 創(chuàng)建標(biāo)簽,并貼上圖片 |
3.3 關(guān)于sticky
????????在cell中如何擺放小控件?sticky=tk.??,其中??就是如下圖所指定
- 如果您不提供粘性屬性,則默認(rèn)行為是將小部件在單元格中居中。
- 您可以使用 Sticky=tk.NE(右上角)、tk.SE(右下角)、tk.SW(左下角)或 tk.NW(左上角)將小部件放置在單元格的一角。
- 您可以使用 Sticky=tk.N(頂部中心)、tk.E(右側(cè)中心)、tk.S(底部中心)或 tk.W(左側(cè)中心)將小部件定位在單元格一側(cè)的中心。
- 使用 Sticky=tk.N+tk.S 垂直拉伸小部件,但使其水平居中。
- 使用 Sticky=tk.E+tk.W 水平拉伸它,但使其垂直居中。
- 使用 Sticky=tk.N+tk.E+tk.S+tk.W 水平和垂直拉伸小部件以填充單元格。
- 其他組合也將起作用。例如,sticky=tk.N+tk.S+tk.W 將垂直拉伸小部件并將其放置在西(左)墻上。
3.4 全部代碼如下
from tkinter import *
from tkinter.ttk import *# creating main tkinter window/toplevel
master = Tk()# this will create a label widget
l1 = Label(master, text="Height")
l2 = Label(master, text="Width")# grid method to arrange labels in respective
# rows and columns as specified
l1.grid(row=0, column=0, sticky=W, pady=2)
l2.grid(row=1, column=0, sticky=W, pady=2)# entry widgets, used to take entry from user
e1 = Entry(master)
e2 = Entry(master)# this will arrange entry widgets
e1.grid(row=0, column=1, pady=2)
e2.grid(row=1, column=1, pady=2)# checkbutton widget
c1 = Checkbutton(master, text="Preserve")
c1.grid(row=2, column=0, sticky=W, columnspan=2)# adding image (remember image should be PNG and not JPG)
img = PhotoImage(file= "prize.png")
img1 = img.subsample(2, 2)# setting image with the help of label
Label(master, image=img1).grid(row=0, column=2,columnspan=2, rowspan=2, padx=5, pady=5)# button widget
b1 = Button(master, text="Zoom in")
b2 = Button(master, text="Zoom out")# arranging button widgets
b1.grid(row=2, column=2, sticky=E)
b2.grid(row=2, column=3, sticky=E)# infinite loop which can be terminated
# by keyboard or mouse interrupt
mainloop()
結(jié)果圖:?