首页 > 解决方案 > 制作一个在 Tkinter 中打开另一个窗口的按钮

问题描述

我有 2 个窗口。图形用户界面和信息

我想在 GUI 上制作一个按钮来打开窗口信息,但我不知道该怎么做。

我尝试使用 TopLevel 小部件,但我不知道如何正确实现它。

这是图形用户界面的代码

from tkinter import *
from automata.fa.dfa import DFA
from DFA import arranca


def btn_clicked():
    print("Button Clicked")
    
def submit():
    canvas.itemconfig(Canv, text="\t"+arranca(entry1.get()))

window = Tk()

window.geometry("880x550")
window.configure(bg = "#ffffff")
canvas = Canvas(
    window,
    bg = "#ffffff",
    height = 550,
    width = 880,
    bd = 0,
    highlightthickness = 0,
    relief = "ridge")
canvas.place(x = 0, y = 0)

这是信息的代码

from tkinter import *

window = Tk()

window.title("Information")
window.geometry("700x400")
window.configure(bg = "#ffffff")
canvas = Canvas(
    window,
    bg = "#ffffff",
    height = 400,
    width = 700,
    bd = 0,
    highlightthickness = 0,
    relief = "ridge")
canvas.place(x = 0, y = 0)

background_img = PhotoImage(file = f"background_1.png")
background = canvas.create_image(
    350.0, 188.0,
    image=background_img)

window.resizable(False, False)
window.mainloop()

标签: pythontkintercanvas

解决方案


这段代码演示了如何创建一个Tk带有按钮的窗口和一个Toplevel子窗口。

您所要做的就是使用您喜欢的小部件填充这些窗口。


import tkinter as tk

class GUI:

    def __init__(self):
        self.parent = tk.Tk()
        self.parent.title("GUI Window")
        # Button control
        button = tk.Button(
            self.parent, text = "New window", command = self.window)
        button.grid(sticky = tk.NSEW)
        # Define window size
        self.parent.geometry("278x26")

    def window(self):
        try:
            self.information.winfo_viewable()
        except AttributeError as err:
            self.information = tk.Toplevel(self.parent)
            # Make Toplevel a child of parent
            self.information.transient( self.parent )
            self.information.title("Information Window")

            # place all your widgets here

        else:
            self.information.focus_force()

if __name__ == "__main__":
    app = GUI()
    app.parent.mainloop()

推荐阅读