Python可视化tkinter练习例子
tkinter是Python 自带(内置)的 图形用户界面(GUI) 库,不需要安装,直接import tkinter后就可使用。
tkinter基本用法
import tkinter as tk
# 创建窗口对象
window = tk.Tk()
# 设置串口标题
window.title("Python GUI")
# 设置窗口大小
window.geometry("600x100") # 固定写法,600x600, 单位为像素
# 使用窗口对象
window.mainloop()
运行效果
下面给出一个Python使用tkinter实现的接弹球小游戏
此程序还用到了:
random 库是 python自带的一个随机库,无需下载安装,直接import random 后就可使用。
winsound库是Python自带的一个声音库,无需下载安装,直接 import winsound后就可使用。
接弹球小游戏源码如下:
# 接弹球游戏
# 导入模块
from tkinter import *
import random
import winsound
# 制作窗口
win = Tk()
txt=Label(win,text="接弹球游戏:左右移动鼠标可以移动挡板。球落地一局结束,点击鼠标左键开新局")
txt.pack()
cv = Canvas(win, width = 640, height = 480)
cv.pack()
# 初始化游戏
def init_game():
global is_gameover, ball_weizhi_x, ball_weizhi_y
global ball_yidong_x, ball_yidong_y, ball_size
global racket_weizhi_x, racket_size, point, speed
is_gameover = False
ball_weizhi_x = 0
ball_weizhi_y = 250
ball_yidong_x = 15
ball_yidong_y = -15
ball_size = 10
racket_weizhi_x = 0
racket_size = 100
point = 0
speed = 50
win.title("弹球游戏:开始!")
# 绘制画面
def draw_screen():
# 清空画面
cv.delete('all')
# 制作画布(画面)
cv.create_rectangle(0, 0, 640, 480, fill="white", width=0)
def draw_ball():
# 绘制小球
cv.create_oval(ball_weizhi_x - ball_size, ball_weizhi_y - ball_size,
ball_weizhi_x + ball_size, ball_weizhi_y + ball_size, fill="red")
def draw_racket():
# 绘制挡板
cv.create_rectangle(racket_weizhi_x, 470,
racket_weizhi_x + racket_size, 480, fill="yellow")
# 移动小球
def move_ball():
global is_gameover, point, ball_weizhi_x, ball_weizhi_y, ball_yidong_x, ball_yidong_y
if is_gameover: return
# 判断是否撞到了左右的墙壁
if ball_weizhi_x + ball_yidong_x < 0 or ball_weizhi_x + ball_yidong_x > 640:
ball_yidong_x *= -1
winsound.Beep(1320, 50)
# 判断是否撞到了顶部
if ball_weizhi_y + ball_yidong_y < 0:
ball_yidong_y *= -1
winsound.Beep(1320, 50)
# 判断是否撞到了挡板
if ball_weizhi_y + ball_yidong_y > 470 and (
racket_weizhi_x <= (ball_weizhi_x + ball_yidong_x)
<= (racket_weizhi_x + racket_size)
):
ball_yidong_y *= -1
if random.randint(0, 1) == 0:
ball_yidong_x *= -1
winsound.Beep(2000, 50)
mes = random.randint(0, 4)
if mes == 0:
message = "不错!"
if mes == 1:
message = "真棒!"
if mes == 2:
message = "干得好!"
if mes == 3:
message = "真厉害!"
if mes == 4:
message = "完美!"
point += 10
win.title(message + "得分=" + str(point))
# 失误时的判定
if 0 <= ball_weizhi_x + ball_yidong_x <= 640:
ball_weizhi_x = ball_weizhi_x + ball_yidong_x
if 0 <= ball_weizhi_y + ball_yidong_y <= 480:
ball_weizhi_y = ball_weizhi_y + ball_yidong_y
if ball_weizhi_y + ball_yidong_y >= 480:
mes = random.randint(0, 2)
if mes == 0:
message = "太弱啦!"
if mes == 1:
message = "失误了哦!"
if mes == 2:
message = "啊,惨不忍睹!"
win.title(message + "得分=" + str(point))
winsound.Beep(600, 50)
is_gameover = True
# 处理鼠标动作
def motion(event): # 确认鼠标指针的位置
global racket_weizhi_x
racket_weizhi_x = event.x
def click(event): # 点击,重新开始
if event.num == 1 and is_gameover :
init_game()
# 确认鼠标的动作和点击
win.bind('<Motion>', motion)
win.bind('<Button>', click)
# 使游戏循环进行
def game_loop():
draw_screen()
draw_ball()
draw_racket()
move_ball()
win.after(speed, game_loop)
# 游戏的主处理
init_game()
game_loop()
win.mainloop()
运行效果如下图:
OK!