Python可视化tkinter练习例子

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的GUI编程 Python基于tkinter的GUI编程讲座_软件开发技术爱好者的博客-CSDN博客

进一步学习了解可见Python基于tkinter的GUI编程 Python基于tkinter的GUI编程讲座_软件开发技术爱好者的博客-CSDN博客

下面给出一个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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值