Добавление или удаление виджетов tkinter из других модулей

Я хотел бы знать, как я могу добавлять или удалять виджеты из импортированного модуля. Я не могу получить к ним доступ правильно. Я знаю, что использование ООП облегчило бы, но я попытался понять ООП, и, хотя принципы легки, я не могу разобраться в деталях, поэтому, поскольку у меня нет подходящего учителя, мне нужно процедурное решение.

Это основной скрипт:

#!/usr/bin/python try: # Python2 import Tkinter as tk except ImportError: # Python3 import tkinter as tk import os import sys sys.path.append(os.path.dirname(os.path.realpath(__file__))) import target def myfunction(event): canvas.configure(scrollregion=canvas.bbox("all"),width=300,height=200) def test(): target.secondWindow() root = tk.Tk() root.geometry("600x350+30+50") myframe = tk.Frame(root,relief="groove",bd=1) myframe.place(x=20, y=30, width=560, height=200 ) canvas = tk.Canvas(myframe) frame = tk.Frame(canvas) myscrollbar=tk.Scrollbar(myframe, orient="vertical", command=canvas.yview) canvas.configure(yscrollcommand=myscrollbar.set) myscrollbar.pack(side="right", fill="y") canvas.pack(side="left") canvas.create_window((0,0), window=frame, anchor='nw') allMissions = { "1":{"name":"go"}, "2":{"name":"see"}, "3":{"name":"win"}, "4":{"name":"party"}} # this would be a text file for a in allMissions.keys(): mn = allMissions[a]["name"] tk.Label(frame, text=mn, justify="left").grid(row=int(a), column=0) # what's bind really doing? frame.bind("<Configure>", myfunction) test = tk.Button(root, command=test, text="TEST") test.place(x = 20, y = 250, width=580, height=40) tk.mainloop() 

и это импортированный модуль: target.py

 try: # Python2 import Tkinter as tk except ImportError: # Python3 import tkinter as tk def changeMainWindow(): # here's where I'm stuck print("What do I have to do to add a new") print("label in the main window from here?") print("Or to delete it?") def secondWindow(): amWin = tk.Toplevel() amWin.geometry("300x200+720+50") button = tk.Button(amWin, text="OK", command=changeMainWindow) button.place(x = 20, y = 80, width=260, height=30) #amWin.mainloop() comment noticed (: 

One Solution collect form web for “Добавление или удаление виджетов tkinter из других модулей”

Вы делаете это, передавая адрес памяти любого виджета во вторую программу. Нет смысла снова импортировать Tkinter, поскольку вы можете просто передать указатель на существующий экземпляр. Если вы собираетесь делать что-то большее, чем просто экспериментировать с Tkinter, то стоит потратить время на изучение уроков сначала на одном из онлайновых сайтов, подобных этому http://www.greenteapress.com/thinkpython/html/thinkpython016 .html Подробнее здесь https://wiki.python.org/moin/BeginnersGuide/NonProgrammers
Вы не получите много ответов с тем, как программа структурирована, потому что большинство программистов используют структуру классов AFAIK, поэтому не знаю, как исправить код в неклассическую среду, поэтому не будет никаких ответов. Если первая программа ниже используемых классов, то второй класс программы может быть унаследован, и функции станут частью класса первой программы и могут быть доступны так же, как и существующие классы, поэтому никакая передача указателей или любой другой хак , было бы необходимо.

 ## I deleted some code for simplicity def myfunction(event): canvas.configure(scrollregion=canvas.bbox("all"),width=300,height=200) def test(): TG.secondWindow() root = tk.Tk() root.geometry("600x350+30+50") myframe = tk.Frame(root,relief="groove",bd=1) myframe.place(x=20, y=30, width=560, height=200 ) canvas = tk.Canvas(myframe) frame = tk.Frame(canvas) myscrollbar=tk.Scrollbar(myframe, orient="vertical", command=canvas.yview) canvas.configure(yscrollcommand=myscrollbar.set) myscrollbar.pack(side="right", fill="y") canvas.pack(side="left") canvas.create_window((0,0), window=frame, anchor='nw') # what's bind really doing? frame.bind("<Configure>", myfunction) test = tk.Button(root, command=test, text="TEST", bg="lightblue") test.place(x = 20, y = 250, width=580, height=40) tk.Button(root, text="Quit All", command=root.quit, bg="orange").place(x=20, y=300) """ instance of the class in the imported program a pointer to the root window and the Tk instance are passed """ TG=target.Target(tk, root) tk.mainloop() 

И target.py. Обратите внимание, что импорт отсутствует.

 class Target(): def __init__(self, tk, root): self.tk=tk self.root=root def changeMainWindow(self): # here's where I'm stuck self.tk.Label(self.amWin, bg="yellow", text =""""What do I have to do to add a new label in the main window from here? Or to delete it?""").place(x=50,y=20) def secondWindow(self): self.amWin = self.tk.Toplevel(self.root) self.amWin.geometry("300x200+720+50") button = self.tk.Button(self.amWin, text="Add Label", command=self.changeMainWindow) button.place(x = 20, y = 90, width=260, height=30). 
  • Как я могу определить, когда кнопка выпущена в Tkinter?
  • Звуки завершаются до следующего, в python?
  • Как получить доступ к переменным из разных классов в tkinter python 3
  • Возможно ли запустить только один шаг цикла событий asyncio
  • Кнопка GUI удерживается нажатой
  • Размещение дочернего окна относительно родителя в Python Tkinter
  • Ошибка создания исполняемого файла с помощью cx_Freeze: IndexError: индекс tuple выходит за пределы диапазона
  • NSException в киви с matplotlib и tkinter
  • Перетаскивание виджеты tkinter
  • Tkinter: «Python не может быть настроен для Tk»
  • Вычисление размера пикселя строки с помощью Python
  • Python - лучший язык программирования в мире.