# Python学习笔记-随机话术器

随机话术器

Python学习笔记-随机话术器

随机选择语句进行组合

因为工作中的文案处理需要用到这么一个功能,所以快速地写了一个。非常的简单易懂……

Python

Python
#coding=utf-8
'''出现了这个报错:SyntaxError: Non-UTF-8 code starting with '\xe5' in file ***.py on line 105, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for,使用网上搜到的方式,在最前面添加 #coding=utf-8 成功解决了问题,但是现在也不太清楚具体的原因'''
import random
"""【标题】"""
title = ['A', 'B', 'C']
"""【互动1】"""
article1 = ['D', 'E', 'F']
"""【互动2】"""
article2 = ['G', 'H']
article3 = ['I', 'J']
article4 = ['K', 'L']
"""【广告】"""
article5 = ['M', 'N']
article6 = ['A', 'B', 'C']
"""【互动3】"""
article7 = ['O', 'K']
print('【标题】')
print(random.choice(title))
print('【互动1】')
print(random.choice(article1))
print('【互动2】')
print(random.choice(article2), random.choice(article3), sep= '')
# sep 为 print 各个元素之间的间隔,因为这里不需要间隔,所以是空的
print(random.choice(article4))
print('【广告】')
print(random.choice(article5))
print(random.choice(article6))
print('【互动3】')
print(random.choice(article7))

这个脚本写得……非常浅显易懂,用C写也是一样的。所以才有了下文。

Python GUI编程(Tkinter)

Python

Python
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 注意 tkinter 的小写,很多教程因为是 python2 就有的,所以是大写
import tkinter
top = tkinter.Tk()
# 进入消息循环
top.mainloop()

Python

Python
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tkinter as tk  

# 使用Tkinter前需要先导入
 
# 第1步,实例化object,建立窗口window
window = tk.Tk()
 
# 第2步,给窗口的可视化起名字
window.title('My Window')
 
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('500x300')  # 这里的乘是小x
 
# 第4步,在图形界面上设定标签
l = tk.Label(window, text='你好!this is Tkinter', bg='green', font=('Arial', 12), width=30, height=2)
# 说明: bg为背景,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
 
# 第5步,放置标签
l.pack()    # Label内容content区域放置位置,自动调节尺寸
# 放置lable的方法有:1)l.pack(); 2)l.place();
 
# 第6步,主窗口循环显示
window.mainloop()
# 注意,loop因为是循环的意思,window.mainloop就会让window不断的刷新,如果没有mainloop,就是一个静态的window,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环
# 所有的窗口文件都必须有类似的mainloop函数,mainloop是窗口文件的关键的关键。

tkinter 组件

控件 描述
Button 按钮控件;在程序中显示按钮。
Canvas 画布控件;显示图形元素如线条或文本
Checkbutton 多选框控件;用于在程序中提供多项选择框
Entry 输入控件;用于显示简单的文本内容
Frame 框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Label 标签控件;可以显示文本和位图
Listbox 列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton 菜单按钮控件,用于显示菜单项。
Menu 菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message 消息控件;用来显示多行文本,与label比较类似
Radiobutton 单选按钮控件;显示一个单选的按钮状态
Scale 范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar 滚动条控件,当内容超过可视化区域时使用,如列表框。.
Text 文本控件;用于显示多行文本
Toplevel 容器控件;用来提供一个单独的对话框,和Frame比较类似
Spinbox 输入控件;与Entry类似,但是可以指定输入范围值
PanedWindow PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件。
LabelFrame labelframe 是一个简单的容器控件。常用与复杂的窗口布局。
tkMessageBox 用于显示你应用程序的消息框。

标准属性

属性 描述
Dimension 控件大小;
Color 控件颜色;
Font 控件字体;
Anchor 锚点;
Relief 控件样式;
Bitmap 位图;
Cursor 光标;

几何管理

Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,一下是Tkinter公开的几何管理类:包、网格、位置

几何方法 描述
pack() 包装;
grid() 网格;
place() 位置;

实践

该部分参考教程:Python GUItkinter窗口视窗教程大集合(看这篇就够了)

  1. 创建主窗口和Label部件

    Python
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # author:洪卫
     
    import tkinter as tk  # 使用Tkinter前需要先导入
     
    # 第1步,实例化object,建立窗口window
    window = tk.Tk()
     
    # 第2步,给窗口的可视化起名字
    window.title('My Window')
     
    # 第3步,设定窗口的大小(长 * 宽)
    window.geometry('500x300')  # 这里的乘是小x
     
    # 第4步,在图形界面上设定标签
    l = tk.Label(window, text='你好!this is Tkinter', bg='green', font=('Arial', 12), width=30, height=2)
    # 说明: bg为背景,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
     
    # 第5步,放置标签
    l.pack()    # Label内容content区域放置位置,自动调节尺寸
    # 放置lable的方法有:1)l.pack(); 2)l.place();
     
    # 第6步,主窗口循环显示
    window.mainloop()
    # 注意,loop因为是循环的意思,window.mainloop就会让window不断的刷新,如果没有mainloop,就是一个静态的window,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环
    # 所有的窗口文件都必须有类似的mainloop函数,mainloop是窗口文件的关键的关键。
    
  2. Button 窗口部件

    创建方式:指定按钮的内容(文本、位图、图象)和一个当按钮被按下时的回调函数即可:

    b = tk.Button(window, text="hit me", command=hit_me)

    没有回调函数的按钮是没有用的,当你按下这个按钮时它什么也不做。你可能在开发一个应用程序的时候想实现这种按钮,比如为了不干扰你的beta版的测试者:

    b = tk.Button(window, text="Help", command=DISABLED)

Python
#!/usr/bin/env python
# -*- coding: utf-8 -*
 
import tkinter as tk  

window = tk.Tk()
window.title('My Window')
window.geometry('500x300') 
var = tk.StringVar()    
l = tk.Label(window, textvariable=var, bg='green', fg='white', font=('Arial', 12), width=30, height=2)
l.pack()
# 定义一个函数功能(内容自己自由编写),供点击Button按键时调用,调用命令参数command=函数名
on_hit = False
def hit_me():
    global on_hit
    if on_hit == False:
        on_hit = True
        var.set('you hit me')
    else:
        on_hit = False
        var.set('')
 
# 第5步,在窗口界面设置放置Button按键
b = tk.Button(window, text='hit me', font=('Arial', 12), width=10, height=1, command=hit_me)
b.pack()
window.mainloop()

因为这个话术器需要用到大量的字符串处理,所以这个时候就要用到 F-Strings了,如:

Python
f"{name.lower()} is funny."

由于f字符串是在运行时进行渲染的,因此可以将任何有效的Python表达式放入其中。

可以做一些非常简单的事情,就像这样:

Python
f"{2 * 37}"

# 输出
'74'

可以调用函数

Python
f"{name.lower()} is funny."

# 输出
'eric is funny.'

甚至可以使用带有f字符串的类创建对象。

Python
class Comedian:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def __str__(self):
        return f"{self.first_name} {self.last_name} is {self.age}."

    def __repr__(self):
        return f"{self.first_name} {self.last_name} is {self.age}. Surprise!"
    
new_comedian = Comedian("Eric", "Idle", "74")

f"{new_comedian}"

'Eric Idle is 74.'

__str __()__repr __()方法处理对象如何呈现为字符串,因此您需要确保在类定义中包含至少一个这些方法。如果必须选择一个,请使用__repr __(),因为它可以代替__str __()

__str __()返回的字符串是对象的非正式字符串表示,应该可读。__repr __()返回的字符串是官方表示,应该是明确的。调用str()repr()比直接使用__str __()__repr __()更好。

默认情况下,f字符串将使用__str __(),但如果包含转换标志!r,则可以确保它们使用__repr __()

以上就是Python的魔法方法,这里只是提到,以后再细说,我们回到 F-Strings 上来。

多行字符串:

Python
message = (f"Hi {name}. "
        f"You are a {profession}. "
        f"You were in {affiliation}.")
message

# 输出
'Hi Eric. You are a comedian. You were in Monty Python.'

没必要将f放在多行字符串的每一行的前面。以下代码也能运行:

Python
message = (f"Hi {name}. "
        "You are a {profession}. "
        "You were in {affiliation}.")
message

# 输出
'Hi Eric. You are a {profession}. You were in {affiliation}.'

但是如果使用"""这将会发生什么:

Python
message = f"""
    Hi {name}. 
    You are a {profession}. 
    You were in {affiliation}.
 """

message

# 输出
'\n    Hi Eric. \n    You are a comedian. \n    You were in Monty Python.\n '

其余为提到的问题均在F-Strings:超级好用的Python格式字符串!!这篇文章中。

将之前的程序用 f-string 重写。

Python
#coding=utf-8
import random
"""【标题】"""
title = ['A', 'B', 'C']
"""【互动1】"""
article1 = ['D', 'E', 'F']
"""【互动2】"""
article2 = ['G', 'H']
article3 = ['I', 'J']
article4 = ['K', 'L']
"""【广告】"""
article5 = ['M', 'N']
article6 = ['A', 'B', 'C']
"""【互动3】"""
article7 = ['O', 'K']
A = (f""" 【标题】 \n 
  {random.choice(title)} \n 
 【互动1】 \n 
 {random.choice(article1)} \n
 【话术+互动】\n
 {random.choice(article2)}{random.choice(article3)} \n
 {random.choice(article4)} \n
【广告+互动】\n
 {random.choice(article5)} \n
 {random.choice(article6)} \n
【末互动】\n
 {random.choice(article7)} """)
print ( A )

将之前的那两个程序结合在一起。

Python
import tkinter as tk
import random

window = tk.Tk()
window.title('My Window')
window.geometry('1366x768')
var = tk.StringVar()
l = tk.Text(window)
l.pack()
# 定义一个函数功能(内容自己自由编写),供点击Button按键时调用,调用命令参数command=函数名
on_hit = False


def txt():
    """【标题】"""
    title = ['A', 'B', 'C']
    """【互动1】"""
    article1 = ['D', 'E', 'F']
    """【互动2】"""
    article2 = ['G', 'H']
    article3 = ['I', 'J']
    article4 = ['K', 'L']
    """【广告】"""
    article5 = ['M', 'N']
    article6 = ['A', 'B', 'C']
    """【互动3】"""
    article7 = ['O', 'K']
    A = (f""" 【标题】 \n
     {random.choice(title)} \n
     【互动1】 \n
     {random.choice(article1)} \n
     【话术+互动】\n
     {random.choice(article2)}{random.choice(article3)} \n
     {random.choice(article4)} \n
     【广告+互动】\n
     {random.choice(article5)} \n
     {random.choice(article6)} \n
     【末互动】\n
     {random.choice(article7)} """)
    return (A)


def hit_me():
    global on_hit
    if on_hit == False:
        on_hit = True
        A = txt()
        l.insert('insert', A)
    else:
        on_hit = False
        l.insert('insert', '')


# 第5步,在窗口界面设置放置Button按键
b = tk.Button(window,
              text='hit me',
              font=('Arial', 12),
              width=10,
              height=1,
              command=hit_me)
b.pack()
window.mainloop()

打包

装逼技能:把你的Python程序打包成exe可执行文件

pyinstaller -F .\文件名.py

最后编辑于
文章链接: http://pheustal.com/2019/11-04/话术
本作品采用CC-BY-SA许可。