Verschieben einer Funktion von einer Rahmenklasse in eine Befehlsklasse in TKinterPython

Python-Programme
Anonymous
 Verschieben einer Funktion von einer Rahmenklasse in eine Befehlsklasse in TKinter

Post by Anonymous »

Ich lerne OO -Programmierung, indem ich eine vorhandene App konvertiere, die in gerade TKinter programmiert ist. Ich muss in der Lage sein, über eine Schaltfläche in links_frame auf ein Eintragsfeld in top_frame zugreifen zu können. Ich habe es geschafft, dies zu erreichen, indem ich eine Instanz von top_frame an links_frame übergeben habe und mit dem Programm, wie es hier aufgeführt ist, funktioniert. Allerdings wollte ich alle Methoden für Klarheit in eine Befehlsklasse einbringen, damit die Frame -Klassen die Benutzeroberfläche festlegen und die Befehlsklasse die Arbeit erledigt. Mein Problem ist, dass ich den Inhalt von top_frame.g_round in der Methode der Liste Golfer in der Befehlsklasse verwenden muss. Ich habe verschiedene Antworten ausprobiert, aber jeder gibt mir Fehler. Ich habe viele Videos/Texte durchgemacht, um es auszuarbeiten, aber eindeutig habe ich etwas verpasst. Danke < /p>

Code: Select all

from tkinter import *
import tkinter as tk
from ttkbootstrap.constants import *
import ttkbootstrap as tb
from ttkbootstrap import Style
from ttkbootstrap.scrolled import ScrolledText, ScrolledFrame
#import sqlite3
#from sqlite3 import Error
from ttkbootstrap.dialogs import Messagebox

class Commands(tb.Frame):
def __init__(self,parent, left_frame_instance):
super().__init__(parent)
l_frame = left_frame_instance
def list_golfers(self):
x= self.l_frame.tframe1.g_round.get()
print('list_golfers')
print(x)

def new_golfer():
print('new_golfer')

def report():
print('report')

def select():
print('select')

class Top_Frame(tb.Frame):

def __init__(self, parent):       # Create widgets
super().__init__(parent,width=900, height=200, bootstyle ='light')

self.pack(padx=10, pady=5, fill=BOTH)

self.g_round = tb.Entry(self,width=3, font=("Courier",10))
self.g_round.grid(row = 0, column=1,padx=10,pady=10)
self.round_label = tb.Label(self, text = "You must enter the round number before proceeding -->  ", font=('Courier', 10))
self.round_label.grid(row=0,column=0,padx=10,pady=10)

class Left_Frame(tb.Frame):
def __init__(self,parent, top_frame_instance):
super().__init__(parent,width=400, height=600, bootstyle ='light')
self.tframe1 = top_frame_instance  # Store reference to Frame1 instance

self.pack(side='left',padx=10, pady=5, fill=BOTH, expand= True)

self.create_Lwidgets()

def list_golfers(self):
x= self.tframe1.g_round.get()
print('list_golfers')
print(x)

def create_Lwidgets(self):
my_list_btn=tb.Button(self,text='list',bootstyle='success', command= self.list_golfers)
my_list_btn.grid(row=0, column=0,padx=5,pady=5)

list_frame = tb.Frame(self,width=200, height=800,bootstyle='primary')
list_frame.grid(row=1, column=0,padx=5,pady=5, rowspan=18)

my_listbox=Listbox(list_frame)
my_listbox.pack(padx=0,pady=15, side = LEFT,fill='both')

my_scrollbar = Scrollbar(list_frame)
my_scrollbar.pack(side = RIGHT, fill = BOTH)

my_listbox.config(yscrollcommand = my_scrollbar.set)
my_scrollbar.config(command = my_listbox.yview)

golfer_button= tb.Button(self, text='New Golfer',bootstyle ='success',command = Commands.new_golfer)
golfer_button.grid(row=21, column=0,padx=10,pady=10)

report_button= tb.Button(self, text='Generate Report',bootstyle ='success',command = Commands.report)
report_button.grid(row=22, column=0,padx=10,pady=10)

select_btn = tb.Button(self, text="Select", bootstyle = SUCCESS,command = Commands.select)
select_btn.grid(row=4, column=1, pady=5, padx=5)

id_label=tb.Label(self,text = 'id')
id_label.grid(row=2,column=2,padx=10)

g_id = tb.Entry(self,width=3, font=("Courier",10), state='disabled')
g_id.grid(row = 2, column=3,padx=5,pady=5)

class Right_Frame(tb.Frame):
def __init__(self,parent):
super().__init__(parent,width=400, height=600, bootstyle ='light')
self.pack(side= 'right',padx=10, pady=5, fill=BOTH, expand=True)

self.create_Rwidgets()
#create widgets
def create_Rwidgets(self):
my_label = tb.Label(self, text = "Batch Scores", font=('Courier', 10))
my_label.grid(row=0,column=0,padx=10,pady=10)

Ts = Listbox(self, height = 30, width = 30)
Ts.grid(row= 2, column= 0, sticky= N, columnspan = 5, padx= 10, pady= 15)

class MyApp(tb.Window):
def __init__(self):
super().__init__(themename = 'terry')
# self.root = root
self.title("TTKBootstrap OOP Example")
self.geometry("1000x1000")

top_frame = Top_Frame(self)
left_frame = Left_Frame(self,top_frame)
right_frame = Right_Frame(self)
commands = Commands(self, left_frame)

if __name__ == "__main__":
app = MyApp()  # Create an instance of MyApp
app.mainloop()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post