Customtkinter "master" Parameter beim erstellen von einem Textfeld?

Hey,

ich habe eine Klasse erstellt die ein Hauptfenster erstellt und möchte aus einer anderen klasse einen Textfeld erstellen der sich auf das Hauptfenster bezieht.
So wie ich es verstanden habe braucht man dafür den Parameter "master" um vorzugeben in welchem Fenster nun der Textfeld angezeigt werden soll.
Leider funktioniert das bei mir nicht so richtig. Hat jemand davon Ahnung und kann mir meinen Fehler zeigen?
lieben Dank! :)

main.py

import view
import controller
import customtkinter as ctk

class Main(view.MainWindow):
   def __init__(self):
       super().__init__()
       self.main_window = view.MainWindow()
       self.main_window.set_size("1680", "900")
       self.main_window.set_title("YourTerminal")
       controller.InputBoxMain()# Nach meinem Verständnis muss hier der Master-Parameter angegeben werden. Wie übergebe ich diesen?

   def run(self):
       self.main_window.get_window().mainloop()

if __name__ == "__main__":
    app = Main()
    app.run()

view.py

import customtkinter as ctk


class MainWindow:
   def __init__(self):
       self.window = ctk.CTk()

   def set_size(self, width, height):
       self.window.geometry(f"{width}x{height}")

   def set_title(self, title):
       self.window.title(title)

   def get_window(self):
       return self.window

class WindowTemplate:
   def __init__(self):
       self.window = ctk.CTkToplevel()

   def set_size(self, width, height):
       self.window.geometry(f"{width}x{height}")

   def set_title(self, title):
       self.window.title(title)

   def get_window(self):
       return self.window

# der master Parameter gibt an wo diese Box angezeigt werden soll
class InputBoxTemplate:
    def __init__(self, master):  # Wie übergebe ich den master Parameter?
        self.master = master
        self.box = ctk.CTkEntry(self.master)

    def set_size(self, width, height, y, x):
        self.box.place(width=width, height=height, pady=y, padyx=x)

    def set_placeholder(self, placeholder):
        self.box._placeholder_text(f"{placeholder}")

controller.py

import view
import customtkinter as ctk
import main
class InputBoxMain(view.InputBoxTemplate, main.Main):
    def __init__(self):
        super().__init__()
        self.master = ctk.CTk()
        self.window = view.InputBoxTemplate(self.master)# Oder der Master-Parameter wird hier übergeben? Hier versuche ich master auf ctk.CTk zu beziehen. Das ist das Haupfenster.
        self.window.set_size(200, 200, 10, 10)
        self.window.set_placeholder("Hier steht der Placeholder")

Hier die Fehlermeldung falls relevant:

Traceback (most recent call last):

 File , line 1, in <module>

  import view

 File , line 2, in <module>

  import main

 File , line 2, in <module>

  import controller

 File " line 4, in <module>

  class InputBoxMain(view.InputBoxTemplate, main.Main):

            ^^^^^^^^^^^^^^^^^^^^^

AttributeError: partially initialized module 'view' has no attribute 'InputBoxTemplate' (most likely due to a circular import)

Code, Programmiersprache, Python, Python 3, Objektorientierte Programmierung, Tkinter, Pycharm
Python Scrip Tasteneingabe zum Spiel?

Hallo, ich probiere mich grade im Programmieren.
aus spaß/versuch wollte ich eine Geschick spiel automatisierten
Aber ich bekomme es einfach nicht hin, dass das Scrip die tastenbefehle zum spiel sendet aber genau das passiert nicht.
wen ich es in einer Text Datei probiere klappts.
Script:

import cv2
import numpy as np
import pyautogui
import time
# Funktion zum Erstellen eines Screenshots eines bestimmten Bereichs
def take_screenshot(region=None):
  try:
    screenshot = pyautogui.screenshot(region=region)
    screenshot = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)
    return screenshot
  except Exception as e:
    print(f"Fehler beim Erstellen des Screenshots: {e}")
    return None
# Funktion zum Finden einer Vorlage in einem Screenshot
def find_template(screenshot, template_path, threshold=0.8):
  try:
    template = cv2.imread(template_path, 0)
    if template is None:
      print(f"Vorlage konnte nicht geladen werden: {template_path}")
      return False
    screenshot_gray = cv2.cvtColor(screenshot, cv2.COLOR_BGR2GRAY)
    result = cv2.matchTemplate(screenshot_gray, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    if max_val >= threshold:
      print(f"Vorlage {template_path} gefunden bei {max_loc}, mit Wert {max_val}")
      return True
  except cv2.error as e:
    print(f"OpenCV Fehler beim Finden der Vorlage: {e}")
  except Exception as e:
    print(f"Allgemeiner Fehler beim Finden der Vorlage: {e}")
  return False
# Hauptfunktion für die Automatisierung
def play_waveshaper(region):
  shapes_templates = {
    'triangle_down': r'C:\Users\nilsw\Pictures\Screenshots\triangle_down_template.png',
    'triangle_up': r'C:\Users\nilsw\Pictures\Screenshots\triangle_up_template.png',
    'square_up': r'C:\Users\nilsw\Pictures\Screenshots\square_up_template.png',
    'square_down': r'C:\Users\nilsw\Pictures\Screenshots\square_down_template.png'
  }
  shapes_keys = {
    'triangle_down': 'Q', # Tastenbelegung für Dreieck Runter
    'triangle_up': 'E',  # Tastenbelegung für Dreieck Hoch
    'square_up': 'W',   # Tastenbelegung für Viereck Hoch
    'square_down': 'S'   # Tastenbelegung für Viereck Runter
  }
  try:
    while True:
      screenshot = take_screenshot(region)
      if screenshot is None:
        print("Screenshot ist None, versuche es erneut.")
        continue
      found = False
      for shape, template_path in shapes_templates.items():
        if find_template(screenshot, template_path):
          if shape in shapes_keys:
            key = shapes_keys[shape]
            print(f"Muster {shape} gefunden und die Taste {key} wird gedrückt.")
            pyautogui.press(key)
            time.sleep(0.1) # Kurze Verzögerung nach Tastendruck
            found = True
      if found:
        # Füge hier weitere Aktionen hinzu, die ausgeführt werden sollen, wenn ein Muster gefunden wurde
        time.sleep(1) # Beispiel für eine Pause, bevor der nächste Screenshot gemacht wird
      else:
        time.sleep(0.1) # Warte eine kurze Zeit, bevor der nächste Screenshot gemacht wird
  except KeyboardInterrupt:
    print("Automatisierung gestoppt")
  except Exception as e:
    print(f"Ein Fehler ist aufgetreten: {e}")
if __name__ == "__main__":
  region = (0, 0, 1279, 1389) # Region, die den gesamten Bildschirm abdeckt
  print(f"Überwachte Region: {region}")
  play_waveshaper(region)
cmd, Code, Programmiersprache, Python
Martingale Strategie Bot programmieren mit Python?

Ich bin gerade dabei einen Bot für ein Demo Casino spiel zu programmieren aber bekomme es nicht richtig zum laufen. Es geht darum, eine bestimmte Roulette Strategie zu automatisieren. Es wird am Anfang auch Schwarz gesetzt und wenn das Roulette Rad leztendlich Schwarz trifft ist auf dem bildschirm ein Gewinn screen der die farbe RGB: (255, 214, 93) hat. wenn dieser auftaucht soll das ganze skript von vorne laufen und wieder nur einmal Geld einsetzen. Wenn aber der screen nicht kommt und die farbe demnach anders ist so soll der einsatz mit lost() verdoppelt werden. jedoch erkennt das skript die farbe irgendwie nie und überspringt daher fälschlicher Weise auf else. Danke für jede Hilfe.

from pyautogui import *
import pyautogui
import time
import keyboard
import numpy as np
import random
import win32api, win32con

time.sleep(3)

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
    time.sleep(0.1)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)

def lost():
    time.sleep(11)
    click(1193,1018)
    time.sleep(random.uniform(0.9,1.3))
    click(1350,1003)
def win():
    time.sleep(11)
    click(888, 887)
    time.sleep(random.uniform(0.9,1.3))
    click(1350, 1003)
def win_orig():
    click(888, 887)
    time.sleep(random.uniform(0.9,1.3))
    click(1350, 1003)
win_orig()
while keyboard.is_pressed('q') == False:
    time.sleep(18.5)
    if pyautogui.pixel(865, 483) [2] == 93:
        win()
        continue
    else:
        lost()
        continue
programmieren, Bot, Code, Programmiersprache, Python, Tkinter, Pycharm

Meistgelesene Beiträge zum Thema Python