首页 > 解决方案 > 如何在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()

标签: pythontkinter

解决方案


你去吧,改进了你的代码:

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()

您可以将它们移动到类中,以便在每次创建类实例时调用它们


推荐阅读