16 圖形界面
Tkinter
編寫一個最簡單的窗口:
from tkinter import *
class Application(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
def createWidgets(self):
self.helloLabel = Label(self, text = 'Hello,world!')
self.helloLabel.pack()
self.quitButton = Button(self, text = 'Quit', command=self.quit)
self.quitButton.pack()
app = Application()
app.master.title('Hello World')
app.mainloop()
輸入文本
from tkinter import *
import tkinter.messagebox as messagebox
class Application(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
def createWidgets(self):
# self.helloLabel = Label(self, text = 'Hello,world!')
# self.helloLabel.pack()
# self.quitButton = Button(self, text = 'Quit', command=self.quit)
# self.quitButton.pack()
self.nameInput = Entry(self)
self.nameInput.pack()
self.alertButton = Button(self, text = 'Hello', command=self.hello)
self.alertButton.pack()
def hello(self):
name = self.nameInput.get() or 'world'
messagebox.showinfo('Message', 'Hello,%s' % name)
app = Application()
app.master.title('Hello World')
app.mainloop()
16.1 海龜繪圖
繪製一個長方形:
# 導入turtle包的所有內容:
from turtle import *
# 設置筆刷寬度:
width(4)
# 前進:
forward(200)
# 右轉90度:
right(90)
# 筆刷顏色:
pencolor('red')
forward(100)
right(90)
pencolor('green')
forward(200)
right(90)
pencolor('blue')
forward(100)
right(90)
# 調用done()使得窗口等待被關閉,否則將立刻關閉窗口:
done()
繪製5個五角星:
from turtle import *
def drawStar(x, y):
pu()
goto(x, y)
pd()
# set heading: 0
seth(0)
for i in range(5):
fd(40)
rt(144)
for x in range(0, 250, 50):
drawStar(x, 0)
done()
繪製分形樹:
from turtle import *
# 設置色彩模式是RGB:
colormode(255)
lt(90)
lv = 14
l = 120
s = 45
width(lv)
# 初始化RGB顏色:
r = 0
g = 0
b = 0
pencolor(r, g, b)
penup()
bk(l)
pendown()
fd(l)
def draw_tree(l, level):
global r, g, b
# save the current pen width
w = width()
# narrow the pen width
width(w * 3.0 / 4.0)
# set color:
r = r + 1
g = g + 2
b = b + 3
pencolor(r % 200, g % 200, b % 200)
l = 3.0 / 4.0 * l
lt(s)
fd(l)
if level < lv:
draw_tree(l, level + 1)
bk(l)
rt(2 * s)
fd(l)
if level < lv:
draw_tree(l, level + 1)
bk(l)
lt(s)
# restore the previous pen width
width(w)
speed("fastest")
draw_tree(l, 4)
done()