继上文用python写了一个小demo,用控制台显示逻辑显然不是很合理,查询了很多资料,发现gui编程有tkinter比较好用,然后就在上一个版本的基础上写了一个进阶
Tkinter是几个常用 Python GUI 库之一
现在就让我们开始把
from tkinter import *
root = Tk()
root.mainloop()
# 创建窗口
root = Tk()
# 窗口大小 960x300
root.geometry('960x300')
# 窗口标题
root.title('石头剪刀布进阶')
# 标题好看成功一半(●'◡'●)
# 标签控件 先写整体的栅格3*4 采用grid布局
col_1 = Label(root, text='%13s' % '猜', font=('华文彩云', 40), fg='purple')
# 标签定位 row,column不传默认为0
col_1.grid(row=0, column=0)
col_2 = Label(root, text='%13s' % '拳', font=('华文彩云', 40), fg='purple').grid(row=0, column=1) # 链式调用
col_3 = Label(root, text='%13s' % '风', font=('华文彩云', 40), fg='purple').grid(row=0, column=2)
col_4 = Label(root, text='%13s' % '云', font=('华文彩云', 40), fg='purple').grid(row=0, column=3)
# 主体应该是三个按钮
# 提示
tip = Label(root, text='%15s' % '请选择', font=('行楷', 20), fg='red').grid()
# 按钮控件
button_1 = Button(root, text='石头', font=('行楷', 20), command=button_click_1, activebackground='pink',
fg='blue').grid(row=1, column=1)
button_2 = Button(root, text='剪刀', font=('行楷', 20), command=button_click_2, activebackground='pink', fg='blue')
button_2.grid(row=1, column=2)
button_3 = Button(root, text=' 布 ', font=('行楷', 20), command=button_click_3, activebackground='pink', fg='blue')
button_3.grid(row=1, column=3)
button_1 = Button(root, text='石头', font=('行楷', 20), command=button_click_1, activebackground='pink',
fg='blue').grid(row=1, column=1)
def button_click_1():
#和电脑猜拳比大小
pass
# 结果提示
# 结果值 定义全局
global result
result = StringVar(root)
result_tip = Label(root, textvariable=result, font=('华文彩云', 20), fg='orange').grid(row=2, column=1, columnspan=2)
# -*- coding: utf-8 -*-
# @Time : 2021/02/19 11:30
# @Author : stt
# @Software: PyCharm
""" functions
Gui_demo provides Graphical User Interface for user to make more fun
"""
from tkinter import * # *只导入初始化的一些并非全部
from tkinter import messagebox # 消息提示框
import ctypes
import random
# 定义全局变量
global result
global name
name = 'tt'
def create_tk():
""" 窗体的主体 """
# 创建窗口
root = Tk()
# 窗口大小 960x300
root.geometry('960x300')
# 窗口标题
root.title('石头剪刀布进阶')
""" 标题 """
# 标题好看成功一半(●'◡'●)
# 标签控件 先写整体的栅格5*5 采用grid布局
col_1 = Label(root, text='%13s' % '猜', font=('华文彩云', 40), fg='purple')
# 标签定位 row,column不传默认为0
col_1.grid(row=0, column=0)
col_2 = Label(root, text='%13s' % '拳', font=('华文彩云', 40), fg='purple').grid(row=0, column=1) # 链式调用
col_3 = Label(root, text='%13s' % '风', font=('华文彩云', 40), fg='purple').grid(row=0, column=2)
col_4 = Label(root, text='%13s' % '云', font=('华文彩云', 40), fg='purple').grid(row=0, column=3)
""" 标题 """
""" 主体 """
# 主体应该是三个按钮
# 提示
tip = Label(root, text='%15s' % '请选择', font=('行楷', 20), fg='red').grid()
# 按钮控件
button_1 = Button(root, text='石头', font=('行楷', 20), command=button_click_1, activebackground='pink',
fg='blue').grid(row=1, column=1)
button_2 = Button(root, text='剪刀', font=('行楷', 20), command=button_click_2, activebackground='pink', fg='blue')
button_2.grid(row=1, column=2)
button_3 = Button(root, text=' 布 ', font=('行楷', 20), command=button_click_3, activebackground='pink', fg='blue')
button_3.grid(row=1, column=3)
# 结果提示
# 结果值 定义全局
# globals()['result'] = StringVar()
global result
result = StringVar(root)
result_tip = Label(root, textvariable=result, font=('华文彩云', 20), fg='orange').grid(row=2, column=1, columnspan=2)
""" 主体 """
# 显示窗口
root.mainloop()
def button_click_1():
global result
res = game_judge(1)
result.set(res)
def button_click_2():
global result
res = game_judge(2)
result.set(res)
def button_click_3():
global result
res = game_judge(3)
result.set(res)
def game_judge(player_nist):
""" 猜拳逻辑
:param player_nist: 玩家出的拳 1.石头 2.剪刀 3.布
:return 比赛结果
"""
# 模拟电脑出拳
# TODO 电脑可以设置难度 初步方案可以直接概率胜,或者AI分析
# 这里采用随机数random 1.石头 2.剪刀 3.布
cpu_nist = random.randint(1, 3)
# 把1 2 3转化成石头 剪刀 布 用字典能很好解决这个问题
nist_dict = {
1: '石头', 2: '剪刀', 3: '布'}
# 判断逻辑 不难发现想赢只有三种 石头->剪刀。。。即player_nist-cpu_nist==-1 or 2
sub = player_nist - cpu_nist
if sub == -1 or sub == 2:
# 赢了
res = name + '出了' + nist_dict[player_nist] + '\n 电脑出了' + nist_dict[cpu_nist] + "\n恭喜你赢啦(●'◡'●)"
elif sub == 0:
# 平局
res = name + '出了' + nist_dict[player_nist] + '\n 电脑出了' + nist_dict[cpu_nist] + '\n平局,有点菜哦o(* ̄▽ ̄*)ブ'
else:
# 输了
res = name + '出了' + nist_dict[player_nist] + '\n 电脑出了' + nist_dict[cpu_nist] + '\n小菜鸡,再去练几年吧q(≧▽≦q)'
return res
if __name__ == '__main__':
create_tk()
记录自己成长点滴,也分享给大家学习的心得
(期盼带给你欢乐,祝你学习愉快~)