过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

大家好,又见面了,我是全栈君。

 过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

续上一篇学习,我们搞定了了tkinter的基础函数,这次我们开始来搞事情。

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

一、目录

 

 过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

一、目录

二、前言

三、撩妹弹窗正文

第一步:实现一个窗口

第二步:弹窗都是爱你的模样

第三步:实现启动多个窗口

第四步:每隔一段时间弹出一个骚扰窗口

第五步:随机的窗口


二、前言

在开始学习之前,你可能需要去看一下上一篇文章,因为这篇文章方法是使用到上一篇基础的东西。

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(1)–上帝给你开一个窗口(Tkinter)

骚操作的本质都是简单的,只不过是基础知识的延伸,再加上一点点创意。

一个弹窗,我们会了,那一堆弹窗呢?这次我们要解决一堆弹窗。

三、撩妹弹窗正文

第一步:实现一个窗口

首先我们先来创建一个普通的弹窗。这里我们需要制定一下窗口的需求:

  1. 窗口大小固定
  2. 背景颜色为浅蓝色
  3. 显示文字“祝福弹框”
  4. 以函数的方式实现,调用函数便可启动弹窗

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

 

最终的需求代码如下:

import tkinter
from tkinter import *
tk=tkinter.Tk()

def window():
    tk.title("一个窗口")  # 设置窗口名称
    tk.geometry("180x80+500+300")
    tk.iconbitmap('favicon.ico')
    tk["background"] = "#7AC5CD"
    tk.maxsize(180, 80)
    tk.minsize(180, 80)
    # tk.attributes("-toolwindow", True)#隐藏顶部工具栏之后,icon不会显示
    Label(text="祝福弹窗",bg="#7AC5CD",width=25,height=5,font=60).grid(column=1,row=1)
    tk.mainloop()

if __name__ == '__main__':
    window()

完整需求实现,如图:

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

 

第二步:弹窗都是爱你的模样

老规矩,我们来说一下我们的需求吧!

  1. 窗口大小固定
  2. 弹窗插入一张图片(任意图片均可)
  3. 图片的大小与窗口一致
  4. 将下面的桃心图片显示在窗口中。

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

好的,我们的需求已经制定了,那我们来看一下。

这还不简单,上一张我们不是可以插入图片了吗?那还不是分分钟钟就搞定的事。来看源代码

import tkinter
from tkinter import *
tk=tkinter.Tk()

def window():
    tk.title("一个窗口")  # 设置窗口名称
    tk.geometry("300x300+500+300")
    tk.iconbitmap('favicon.ico')
    tk["background"] = "#7AC5CD"
    photo = tkinter.PhotoImage(file="Figure_1.jpg")
    tkinter.Label(tk, image=photo).grid(column=0, row=0)  # 把图片整合到标签类中
    tk.mainloop()

if __name__ == '__main__':
    window()

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

需求是满足了,桃心也显示了,但是,jpg格式,不支持。

然后图片大小可以自动缩放,不行,图片它有自己的想法,它要做自己。

再来改这个bug。于是,我们引入了另外一个模块来解决。

import tkinter
from tkinter import *
from PIL import Image, ImageTk
tk=tkinter.Tk()

def window():
    tk.title("一个窗口")  # 设置窗口名称
    tk.geometry("300x300+500+300")
    tk.iconbitmap('favicon.ico')
    tk["background"] = "#7AC5CD"
    image=Image.open("Figure_1.jpg")#打开图片
    image=image.resize((300,300))#设置图片大小
    photo = ImageTk.PhotoImage(image)#引入图片
    tkinter.Label(tk, image=photo).grid(column=0, row=0)  # 把图片整合到标签类中
    tk.mainloop()

if __name__ == '__main__':
    window()

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

第三步:实现启动多个窗口

好了,经过前面的学习,我们已经掌握了一个弹窗的生成诀窍,然后我们来学习打开多个弹窗。

可能有的小伙伴就会说了,一个都解决了,多个那我们直接循环一下。

代码:

if __name__ == '__main__':
    for i in range(1,3):
        window()

然而实际上,不管理循环多少次,页面都只有一个弹框,这是一个新手都会出现的问题。

如果按照上面的运行,你就会发现,当你关闭一个之后,又有一个弹框弹出来,直到循环结束,就问你慌不慌,庆幸你只写了两个。

这时候,就需要用到多线程了。

多线程:某度是这么说的,多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”

通俗点来说,就比如你一个人在干活,又有一堆活需要做,但你又分不开,怎么办,再叫个人来呀。这就是多线程。本来要你一个人做一天的,现在两个人只需要半天。

代码实现:

import threading,time

#不传参数
def run_threaded(func):
    threads = []
    for i in range(2):#线程数量(窗口数量)
        t = threading.Thread(target=func)  # 这里的0表示的是列表中需要展示的数据,当然这里你可以在列表中增加字段数量,这里也可以替换为i
        threads.append(t)  # 将函数加入到线程中
        time.sleep(0.1)  # 加上停顿时间,防止太快,卡死。
        threads[i].start()  # 启动线程

#传参数
def run_threaded2(func,text):
    threads = []
    for i in range(2):  # 线程数量
        t = threading.Thread(target=func, args=(text,))  # 多个参数args=(text,name,sex,)
        threads.append(t)  # 将函数加入到线程中
        time.sleep(0.1)  # 加上停顿时间,防止太快,卡死。
        threads[i].start()  # 启动线程

接着,我们启动程序,运行,结果发现,一个窗口有文字,一个窗口没文字,这是怎么回事呢?

if __name__ == '__main__':
    run_threaded(window)

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

原来,这是我们在之前写程序所埋下的坑,问题出在之前我们定义的标签上。

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

原代码:

 Label(text="祝福弹窗",bg="#7AC5CD",width=25,height=5,font=60).pack()

修改之后:

Label(master=tk,text="祝福弹窗",bg="#7AC5CD",width=25,height=5,font=60).pack()
#master=tk指定窗口显示,框架的父容器,不填写则会全部写入到第一个窗口中

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

多窗口完整代码:

import tkinter
from tkinter import *
from PIL import Image, ImageTk
import threading,time

def window():
    tk = Tk()
    tk.title("一个窗口")  # 设置窗口名称
    tk.geometry("180x80+500+300")
    tk.iconbitmap('favicon.ico')
    tk["background"] = "#7AC5CD"
    tk.maxsize(180, 80)
    tk.minsize(180, 80)
    tk.attributes("-toolwindow", True)#隐藏顶部工具栏之后,icon不会显示
    Label(master=tk,text="祝福弹窗",bg="#7AC5CD",width=25,height=5,font=60).pack()
    #master=tk指定窗口显示,框架的父容器,不填写则会全部写入到第一个窗口中
    tk.mainloop()

#不传参数
def run_threaded(func):
    threads = []
    for i in range(2):#线程数量(窗口数量)
        t = threading.Thread(target=func)  # 这里的0表示的是列表中需要展示的数据,当然这里你可以在列表中增加字段数量,这里也可以替换为i
        threads.append(t)  # 将函数加入到线程中
        time.sleep(0.1)  # 加上停顿时间,防止太快,卡死。
        threads[i].start()  # 启动线程

if __name__ == '__main__':
    run_threaded(window)

 

第四步:每隔一段时间弹出一个骚扰窗口

多个弹窗已经搞定了,那我们继续来弹窗,说明需求:

  1. 需要弹出多个窗口
  2. 每隔多长时间就会自动弹出一个
  3. 关闭一个弹窗之后,依然不影响继续弹窗。

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

这里我们可以采用定时任务的的方式,也可以直接使用等待。定时任务,可以看这篇。

喝~,我笑了,组长交给他如何写定时任务,他却用来撩女朋友(schedule )

代码如下:

import threading,time

#不传参数
def run_threaded(func):
    threads = []
    for i in range(1):#线程数量(窗口数量)
        t = threading.Thread(target=func)  # 这里的0表示的是列表中需要展示的数据,当然这里你可以在列表中增加字段数量,这里也可以替换为i
        threads.append(t)  # 将函数加入到线程中
        time.sleep(0.1)  # 加上停顿时间,防止太快,卡死。
        threads[i].start()  # 启动线程

if __name__ == '__main__':
    while True:
        time.sleep(3)
        run_threaded(window)

是不是很简单,只需要加上一个等待,每次启动一个线程。

注:千万不要把这个发给不太懂电脑的人,不然他可能会因为无法阻止窗口的弹窗,而重启电脑

 

第五步:随机的窗口

我们继续来看随机弹窗,先来说明需求:

  1. 需要弹出很多的弹窗
  2. 需要在不同位置上弹出窗口

在上面,我们已经看出来了,这些窗口弹出的位置,都是固定的,那我们这次来搞定随机的窗口。在不同位置出现。

要实现不同位置,首先要想到的是创建窗口时的函数。

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

我们只需要修改后面的坐标位置就可以了,那要如何实现随机呢,我们需要用到random模块 

import random

print( random.randint(1,10) )        # 产生 1 到 10 的一个整数型随机数  
print( random.random() )             # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) )     # 产生  1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') )   # 从序列中随机选取一个元素
print( random.randrange(1,100,2) )   # 生成从1到100的间隔为2的随机整数

这里,我们用到 random.randint(1,10),我们来选定一个范围,并写入代码:

from tkinter import *
import random
import threading,time

def window():
    tk = Tk()
    tk.title("一个窗口")  # 设置窗口名称
    tk.geometry("180x80+%s+%s"%(random.randint(500,1000),random.randint(300,500)))
    tk.iconbitmap('favicon.ico')
    tk["background"] = "#7AC5CD"
    tk.maxsize(180, 80)
    tk.minsize(180, 80)
    tk.attributes("-toolwindow", True)#隐藏顶部工具栏之后,icon不会显示
    Label(master=tk,text="祝福弹窗",bg="#7AC5CD",width=25,height=5,font=60).pack()
    #master=tk指定窗口显示,框架的父容器,不填写则会全部写入到第一个窗口中
    tk.mainloop()
#不传参数
def run_threaded(func):
    threads = []
    for i in range(1):#线程数量(窗口数量)
        t = threading.Thread(target=func)  # 这里的0表示的是列表中需要展示的数据,当然这里你可以在列表中增加字段数量,这里也可以替换为i
        threads.append(t)  # 将函数加入到线程中
        time.sleep(0.1)  # 加上停顿时间,防止太快,卡死。
        threads[i].start()  # 启动线程
if __name__ == '__main__':
    while True:
        time.sleep(3)
        run_threaded(window)

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

 

这样,我们就解决了这个弹框事件。

相关推荐:

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(1)–上帝给你开一个窗口(Tkinter)

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第四节)-视频,语音合成

动态数据视频(第一节)

bilibili,抖音很火的动态数据视频自动生成(第二节)

matplotlib-bilibili,抖音很火的动态数据视频自动生成(第三节)

matplotlib给女朋友画一个爱心吧,这份满满的爱意,一定要记得收下

欢迎关注我们!

过分了,别人用来做桌面应用开发,这家伙却用来撩妹(2)-上帝给你开了各种撩妹窗口(Tkinter)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111358.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 最全的ios系统导出微信聊天记录&生成词云教程

    首先放一张我的iPhone手机导出微信聊天记录生成的词云效果图(个别敏感词汇请大家自行忽略hhh):对于如何导出手机上的微信聊天记录,网上绝大部分教程提到的“楼月微信聊天记录导出恢复助手”和“手机博士微信聊天记录查看”等软件都是收费的,免费版本只能查看很少的几条聊天记录并且不能导出。在这里提供一种绝对免费的方法可以方便地导出微信聊天记录,后面附上根据聊天记录生成词云的教程。由于我个人的手机是i…

  • word在试图打开文件时遇到错误解决办法,亲测可用[通俗易懂]

    word在试图打开文件时遇到错误解决办法,亲测可用[通俗易懂]现象:解决办法:文件-右键属性-接除锁定如果没有接除锁定,则使用下面这个方法:“word在试图打开文件时遇到错误”解决办法,亲测可用_加鸡腿的博客-CSDN博客_windows在试图打开文件时遇到错误打开word文档时,出现以下报错:解决办法:步骤一:步骤二:步骤三:步骤四:步骤五:步骤六:步骤七:步骤八:点击【确定】即可。…https://blog.csdn.net/qq_43437571/article/details/102962500…

  • Unity3D :关于UGUI的网格重建、动静分离[通俗易懂]

    Unity3D :关于UGUI的网格重建、动静分离[通俗易懂]前言:无论是网上的攻略还是以前的经验来说,都说UGUI需要进行动静分离。也就是说同一个界面下的UI,可活动的元素放在一个Canvas下,不可活动的元素放在另一个Canvas下。虽然两个Canvas打断了合批,但是却减少了网格的重建时间,总体上是有优化的。究其原因,是因为在同一个Canvas下的某个元素发生变化时,同一Canvas下的所有元素都会进行网格重建(ReBatch)。而静态的元素在…

  • Linux安装rinetd

    为什么80%的码农都做不了架构师?>>>…

  • 005 Java面向对象知识点 抽象 封装 继承 多态 命名方式 JavaDoc文档 方法的调用 包的作用「建议收藏」

    005 Java面向对象知识点 抽象 封装 继承 多态 命名方式 JavaDoc文档 方法的调用 包的作用「建议收藏」004Java面向对象知识点Java是一种面向对象的编程语言抽象封装继承多态Java的基本概念Java的命名方式生成JavaDoc文档类方法的调用包的作用和命名规范属性和方法Java是一种面向对象的编程语言面向对象程序的OOP设计的优点:与人类思维习惯一致;隐藏信息,提高了程序的可维护性和安全性,实现模块化和信息隐藏;可以将复杂的业务逻辑简单化,提高了程序的复用性;具有抽象、封装、继承、多态等特性抽象把一组客观事物的特征、行为提取来,来表示此类事物的过程。封装目的:保护某些属

  • MTCNN工作原理「建议收藏」

    MTCNN工作原理「建议收藏」MTCNN工作原理MTCNN是什么MTCNN,Multi-taskconvolutionalneuralnetwork(多任务卷积神经网络),将人脸区域检测与人脸关键点检测放在了一起,基于cascade框架。总体可分为PNet、RNet、和ONet三层网络结构,MTCNN实现流程构建图像金字塔首先讲图像进行不同尺度的变换,构建图像金字塔,以适应不同大小的人脸的进行检测。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号