Python Tkinter - Как поместить виджеты из одного класса в окно другого класса - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть окно из класса MainGUIApp, и у меня есть некоторые виджеты из другого класса, которые я хочу разместить в этом классе MainGUIApp.Как бы это сделать?

import tkinter as tk
from tkinter import ttk, Tk, Menu, Label, StringVar, OptionMenu, Entry, Button, messagebox, Canvas, HORIZONTAL, Text, END

class MainGUIApp(tk.Tk):
    def __init__(self, window_title, window_width, window_length):

        # Window settings
        super(MainGUIApp, self).__init__()

        self.title(window_title)

        # get screen width and height
        ws = self.winfo_screenwidth()
        hs = self.winfo_screenheight()

        # calculate position x, y
        x = (ws / 2) - (window_width / 2)
        y = (hs / 2) - (window_length / 2)
        self.geometry('%dx%d+%d+%d' % (window_width, window_length, x, y))

        self.current_directory = "C://Path"
        self.current_company = "Test_Company"

        self.top_panel = TopPanel.TopPanel(self, self.current_directory, self.current_company)

Где класс TopPanel выглядит следующим образом:

from tkinter import Tk
from tkinter import ttk, Tk

class TopPanel(tk.Tk):
    def __init__(self, parent_frame, current_directory, current_company):
        super(parent_frame, self).__init__()
        self.current_directory = current_directory
        self.show_current_directory()

    def show_current_directory(self):

        # Have a text for current directory, pad y by 20, and set anchor to w (west)
        if self.current_directory is None:
            current_directory_text = Label(self,
                                           text="Current Directory:" + '                               '
                                                + "No directory assigned",
                                           font=("Helvetica", 12), anchor='w', pady=20)
        else:
            current_directory_text = Label(self,
                                           text="Current Directory:" + '                               '
                                                + self.current_directory,
                                           font=("Helvetica", 12), anchor='w', pady=20)

        current_directory_text.grid(row=0, sticky="w")

Но проблема в следующем: TopPanel открывается как новое окно.Я хочу, чтобы компоненты TopPanel были частью MainGuiApp.

1 Ответ

0 голосов
/ 25 ноября 2018

Короче говоря, ваш TopPanel должен наследовать от tk.Frame:

class TopPanel(tk.Frame):

Измените строку, чтобы инициализировать tk.Frame с помощью:

super(TopPanel, self).__init__()

И при инициализации экземпляра TopPanel обязательно установите его следующим образом:

self.top_panel.grid(row=0, column=0, sticky="nsew")

import tkinter as tk
from tkinter import ttk, Tk, Menu, Label, StringVar, OptionMenu, Entry, Button, messagebox, Canvas, HORIZONTAL, Text, END

class MainGUIApp(tk.Tk):
    def __init__(self, window_title, window_width, window_length):

        # Window settings
        super(MainGUIApp, self).__init__()

        self.title(window_title)

        # get screen width and height
        ws = self.winfo_screenwidth()
        hs = self.winfo_screenheight()

        # calculate position x, y
        x = (ws / 2) - (window_width / 2)
        y = (hs / 2) - (window_length / 2)
        self.geometry('%dx%d+%d+%d' % (window_width, window_length, x, y))

        self.current_directory = "C://Path"
        self.current_company = "Test_Company"

        self.top_panel = TopPanel(self, self.current_directory, self.current_company)
        self.top_panel.grid(row=0, column=0, sticky="nsew")

from tkinter import Tk
from tkinter import ttk, Tk

class TopPanel(tk.Frame):
    def __init__(self, parent_frame, current_directory, current_company):
        super(TopPanel, self).__init__()
        self.current_directory = current_directory
        self.show_current_directory()

    def show_current_directory(self):

        # Have a text for current directory, pad y by 20, and set anchor to w (west)
        if self.current_directory is None:
            current_directory_text = Label(self,
                                           text="Current Directory:" + '                               '
                                                + "No directory assigned",
                                           font=("Helvetica", 12), anchor='w', pady=20)
        else:
            current_directory_text = Label(self,
                                           text="Current Directory:" + '                               '
                                                + self.current_directory,
                                           font=("Helvetica", 12), anchor='w', pady=20)

        current_directory_text.grid(row=0, sticky="w")

main = MainGUIApp("test", 500, 500)
main.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...