IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python tkinter出牌洗牌 -> 正文阅读

[Python知识库]python tkinter出牌洗牌

python tkinter 出牌洗牌

利用Tkinter模块设计出扑克牌发牌窗体程序,要求4名牌手打牌,计算机随机将52张牌(不含大小王)发给4名牌手,在屏幕上显示每位牌手的牌。程序运行结果如图所示。
在这里插入图片描述

  • 本程序只是实现一个界面和出牌洗牌的功能,不是斗地主游戏!!!
  • 有两个问题没有解决:洗牌的动画效果不好
  • 每次出牌后不能把新打出的牌放到最顶层

源代码:

from functools import partial
from tkinter import *
import random
import time
from PIL import Image,ImageTk
tk=Tk()
tk.title("洗牌,出牌")
tk.geometry("800x600+250+30")
tk.resizable(0,0) 
bu=Button()
buttons=[bu]*52#记录所有选中的按钮
delbuttons=[]#记录所有按钮
sign=[]
imgs=[]
for i in range(1,5):
    for j in range(1,14):
        imgs.insert((i-1)*13+(j-1),PhotoImage(file='images\\'+str(i)+'-'+str(j)+'.gif'))

#为窗口添加背景图片
can=Canvas(tk,width=800,height=600)
im=Image.open('images\\bg.gif')
img=ImageTk.PhotoImage(im.resize((800,600)))
can.create_image(400,300,image=img)
can.pack()

#洗牌后删除所有牌函数
def delbutton():
    for i in range(0,52):
        buttons[i]=bu
        buttons[i].place_forget()
    for i in range(0,len(delbuttons)):
        delbuttons[i].place_forget()
    tk.after(500,washcard1)

#洗牌
def washcard1():
    #打乱图片列表的顺序
    random.shuffle(imgs)
    #创建第一行
    a=230
    #b=[0]*13
    for i in range(0,13):
        l1=Button(tk,image=imgs[i],compound=CENTER)
        command = partial(downclik, l1,a,i)
        #command=upclik(l1,a)结果为:打印了13个hello
        l1.config(command=command)
        l1.place(x=a,y=60)
        a+=20
        delbuttons.append(l1)
    #创建第二列
    a=100
    for i in range(13,26):
        l1=Button(tk,image=imgs[i],compound=CENTER)
        command = partial(leftclik, l1,a,i)
        l1.config(command=command)
        l1.place(x=630,y=a)
        a+=20
        delbuttons.append(l1)
    #创建第二行
    a=230
    for i in range(26,39):
        l1=Button(tk,image=imgs[i],compound=CENTER)
        command = partial(upclik, l1,a,i)
        l1.config(command=command)
        l1.place(x=a,y=400)
        a+=20
        delbuttons.append(l1)
    #创建第一列
    a=100
    for i in range(39,52):
        l1=Button(tk,image=imgs[i],compound=CENTER)
        command = partial(rightclik, l1,a,i)
        l1.config(command=command)
        l1.place(x=70,y=a)
        a+=20
        delbuttons.append(l1)
        
#出牌点击下移事件
def downclik(button,a,i):
    if buttons[i]==bu:#若是第一次点击选中
        button.place(x=a,y=80)
        #b[i]=1
        buttons[i]=button
    else:#第二次点击取消选中
        button.place(x=a,y=60)
        #b[i]=0
        buttons[i]=bu
#出牌点击左移事件
def leftclik(button,a,i):
    if buttons[i]==bu:#若是第一次点击选中
        button.place(x=600,y=a)
        #b[i]=1
        buttons[i]=button
    else:#第二次点击取消选中
        button.place(x=630,y=a)
        #b[i]=0
        buttons[i]=bu
#出牌点击上移事件
def upclik(button,a,i):
    if buttons[i]==bu:#若是第一次点击选中
        button.place(x=a,y=380)
        #b[i]=1
        buttons[i]=button
    else:#第二次点击取消选中
        button.place(x=a,y=400)
        #b[i]=0
        buttons[i]=bu
#出牌点击右移事件
def rightclik(button,a,i):
    if buttons[i]==bu:#若是第一次点击选中
        button.place(x=100,y=a)
        #b[i]=1
        buttons[i]=button
    else:#第二次点击取消选中
        button.place(x=70,y=a)
        #b[i]=0
        buttons[i]=bu        
#出牌事件
def upcard():
    '''
    for j in range(0,len(sign)):
        #delbuttons[sign[j]].place_forget()
        buttons[sign[j]].place_forget()
        sign.pop()
    print("hello")
    '''
    a=300
    for i in range(0,52):
        if buttons[i]!=bu:
            buttons[i].place(x=a,y=225)
            #sign.append(i)
            a+=10
#洗牌事件
def washcard():
    tk.after(100,delbutton)      
#出牌功能按钮
def playcard():
    button=Button(tk,text='出牌',bd=5,bg='red',command=upcard,width=10,height=2)
    button.place(x=480,y=270)

#洗牌功能按钮
def washbutton():
    #washcard()不能加()
    button=Button(tk,text='洗牌',bd=5,bg='red',command=washcard,width=10,height=2)
    button.place(x=200,y=270)
washbutton()
washcard()
playcard()
tk.mainloop() 
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:59:03  更:2021-12-07 11:59:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:21:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码