python - Python Tkinter - 如何将一个类中的小部件放到另一个类的窗口中
问题描述
我有一个来自 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 的一部分。
解决方案
简而言之,您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()
推荐阅读
- python - 如何在pycharm的python控制台中重新加载更新的函数
- ios - 检查元素是数组中的数字
- java - 排球响应数据未在条形图上设置
- swift - 在 ViewControllers 中注入 Swift 变量
- java - Spring Boot + SPring REST + Swagger + JPA +inmemory H2 DB
- java - 在我的应用程序中,我使用 sdk 25.0.0 但是当我运行它时需要 26.0.2 不存在 sdk 并且想要下载它,
- xamarin - 使用 Xamarin Forms 构建 UWP 商店
- javascript - Angular 4 - 使用 Angular 的 *ngFor 在 HTML 上打印唯一且动态的值
- phpmyadmin - 点击下拉列表应显示新表中的外键和主键
- laravel - 想从数据库 n 文件夹中删除文件但不删除表单文件夹