python - 如何在python中打开随机数量的窗口
问题描述
我正在尝试帮助我的儿子学习 Python,他来找我帮助编写以下代码。我似乎无法弄清楚为什么在按下“单击未知”按钮时随机数量的窗口没有打开。
有人可以帮忙吗?
from tkinter import *
from tkinter.ttk import *
import webbrowser
import random
random1 = random.randint(1,1000)
random2 = random.randint(1,1000)
#main window
master = Tk()
master.geometry("1920x1080")
label = Label(master, text ="This is the main window")
label.pack(side = TOP, pady = 10)
master.title("NotAVirus")
#second window
class NewWindow(Toplevel):
def __init__(self, master = None):
super().__init__(master = master)
self.title("Lol Virus")
self.geometry("500x200+",random1,"+",random2)
label = Label(self, text ="This is a fake virus that might have worked we will find out :)")
label.pack()
#button
btn = Button(master, text ="Click for unkown",)
btn.bind("<Button>",
lambda e: NewWindow(master))
btn.pack(pady = 10)
mainloop()
解决方案
你去吧,改进了你的代码:
from tkinter import Tk, Button, Label, Toplevel
import random
random1 = random.randint(1, 1000)
random2 = random.randint(1, 1000)
#main window
master = Tk()
master.geometry("1920x1080")
label_main = Label(master, text="This is the main window")
label_main.pack(side='top', pady=10)
master.title("NotAVirus")
def create_windows():
for i in range(random.randint(1, 1000)):
NewWindow(master)
# second window
class NewWindow(Toplevel):
def __init__(self, parent):
Toplevel.__init__(self, parent)
self.parent = parent
self.title("Lol Virus")
self.geometry(f"500x200+{random1}+{random2}")
label = Label(self, text="This is a fake virus that might have worked we will find out :)")
label.pack()
self.update()
# button
btn = Button(master, text="Click for unkown", command=create_windows)
btn.pack(pady=10)
master.mainloop()
解释部分。我假设您认为.geometry
设置了窗口的数量,或者至少您希望窗口随机散布。有两个问题。随机函数只被调用一次,所以你只会得到两个不会改变的随机数。
下一件事:创建多个窗口您需要实际创建它们,其中一种方法是使用 for 循环,我们可以在其中实际插入随机位,并且每次调用函数时都会获取随机数(也很快请注意,如果选择了更大的随机数,则创建所有这些窗口将需要一段时间。)
最后,不需要真正将按钮绑定到函数,按钮类有一个调用的参数command=
,一旦按下按钮,它将执行给定的函数。
现在关于那些随机位:
class NewWindow(Toplevel):
def __init__(self, parent):
Toplevel.__init__(self, parent)
random1 = random.randint(1, 1000)
random2 = random.randint(1, 1000)
self.parent = parent
self.title("Lol Virus")
self.geometry(f"500x200+{random1}+{random2}")
label = Label(self, text="This is a fake virus that might have worked we will find out :)")
label.pack()
self.update()
您可以将它们移动到类中,以便在每次创建类实例时调用它们
推荐阅读
- reactjs - 在 mobx-persist 中重新水化树结构的问题
- mongodb - 如何从 api 获得响应,但不是 504 网关超时问题
- python - 访问 webdriver 变量到另一个 def 函数
- python-3.x - Ubuntu 18.10 中日志目录的权限错误
- java - JGit - 如何重用 DiffFormatter
- java - 禁用DH密钥对好吗?
- cordova - Ionic Native GooglePlus 登录无法正常工作,没有任何错误和控制台
- oracle - 为什么这个查询需要很长时间才能完成?
- gstreamer - Gstreamer 1.14.4 - Splitmuxsink 不创建多个文件
- angular - 如何期待 httpReq.request.headers.get('authorization').toBeTruthy()?