两个窗口之间的解决方案通信

时间:2019-05-23 19:10:23

标签: python tkinter

我想有两个tkinter窗口。按钮应该在第一个窗口中,反应文本应该在第二个窗口中。 我的问题:

  1. 第二个窗口必须没有模态吗?
  2. 如何使第二个窗口可移动?
  3. 如何通过回调函数将信息提供给第二个窗口?

在此先感谢您的回答和建议!

2 个答案:

答案 0 :(得分:1)

以下一些代码可以为您提供帮助:

from tkinter import *

class App:
    def __init__(self):
        self.window1 = Tk()
        self.window2 = Toplevel()

        self.button = Button(self.window1, bd = 5, text = "Click Me!", command = self.update)
        self.button.pack()

        self.label = Label(self.window2, bd = 5, text = "Button has not been clicked.")
        self.label.pack()

    def update(self):
        self.label.config(text = "Button has been clicked!")
        self.window2.update()
app = App()

说明:

第一行导入tkinter

在下一行中,我们创建一个类。在代码的底部,我们使用该类创建一个对象。这很有用,因为在创建对象时,已经定义了类中的函数,因此可以在调用函数定义之后。

__init__中声明我们的类之后,我们编写在从该类创建对象时将运行的代码。该代码创建两个窗口。一个包含一个按钮,另一个包含一个标签。该按钮具有用于运行类函数update的命令参数。

在更新中,我们更改标签文本并更新窗口。

答案 1 :(得分:0)

我没有下一个问题。我的问题解决方案在这里:

import tkinter as tk

class ViewOnMoon(tk.Toplevel):

    def __init__(self, parent = None, draw = None):
        tk.Toplevel.__init__(self, parent)
        self.transient(parent)  

        self.title('View')
        self.minsize(height = 300, width = 300)

        fr_canvas = tk.Frame(self)
        fr_canvas.place(relx=0.23, rely=0.01, anchor="nw")

        self.canv_w = 200
        self.canv_h = 200
        self.canvas = tk.Canvas(fr_canvas, bg='white', width = self.canv_w, height=self.canv_h)
        self.canvas.grid(column = 0, row = 0)
        return

class GuiMoonMove(tk.Frame):

    def __init__(self, master):

        mon_h = 600
        mon_w = 1250

        tk.Frame.__init__(self, master)
        self.frame = tk.Frame(master, width=1000, height=200, bd=2)

        self.master.title('Move')
        self.master.minsize(height = mon_h, width = mon_w)

        fr_canvas = tk.Frame(self.master)
        fr_canvas.place(relx=0.23, rely=0.01, anchor="nw")


        fr_button = tk.Frame(self.master)
        fr_button.place(relx=0.02, rely=0.06, anchor="nw")

        self.canv_h = 600
        self.canv_w = 950

        self.lbl_view = tk.BooleanVar()  

        chb_view_on_moon = tk.Checkbutton(fr_button, text="Pohled na Měsíc", variable = self.lbl_view, \
            onvalue=True, offvalue=False,command = self.callback)
        chb_view_on_moon.grid(column= 0, row= 4,pady = 10)

        self.canvas = tk.Canvas(fr_canvas, bg='white', width = self.canv_w, height=self.canv_h)
        self.canvas.grid(column = 0, row = 0)

    def callback(self,*args):
        if self.lbl_view.get()==True: 

            self.view_on_moon = ViewOnMoon(parent = self.master)
        else:
            self.vom.destroy()

if __name__=="__main__":

    root = tk.Tk()
    app = GuiMoonMove(master = root)
    app.mainloop()