решение связи между двумя окнами - PullRequest
0 голосов
/ 23 мая 2019

Я хочу иметь два окна tkinter.Кнопка должна быть в первом окне, а текст реакции должен быть во втором окне.Мои вопросы:

  1. Должно ли во втором окне быть модальным?
  2. Как сделать мобильное второе окно?
  3. Как передать информацию во второе окно черезфункция обратного вызова?

Заранее спасибо за ответы и советы!

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Вот код, который может вам помочь:

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.

При обновлении мы меняем текст метки и обновляем окно.

0 голосов
/ 05 июня 2019

У меня нет следующих вопросов.Решение моих проблем здесь:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...