получить значение из записи в другом классе - PullRequest
0 голосов
/ 11 декабря 2018

Итак, я пытаюсь получить значение из записи в другом классе, но не могу заставить его работать, я пытался сделать так, чтобы код был как можно короче, поэтому, надеюсь, вы, ребята, сможете мне помочь

import tkinter as tk
import time
import threading

class lingo(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        m = tk.Frame(self)
        m.grid(row=0, column=0,sticky="nsew")

        e1 = tk.Entry(m)
        e1.grid(row=0, column=0)

        def enter():
            entry1 = e1.get()
            t1 = threading.Thread(target=check)
            t1.start()

        b1 = tk.Button(m, bg="blue", text="enter", command=enter)
        b1.grid(row=0, column=1)

class check():
    def __init__(self):
            lingo1 = lingo()
            entry2 = lingo1.enter()
            entry3 = entry2.entry1()
            print(entry3)

t0 = threading.Thread(target=lingo)
t0.start()  
app = lingo()
app.wm_geometry("1810x1080")
app.resizable(False, False)
app.title("19 LetterWoordenLingo")
app.mainloop()

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Вы можете попытаться вызвать класс lingo в классе инициализации проверки и затем создать объект.

class check(lingo):
    def __init__(self):
        lingo.__init__(self)
        lingo1 = ClassA() 
        entry2 = lingo1.enter()
        entry3 = entry2.entry1()
        print(entry3)

Надеюсь, это поможет.

0 голосов
/ 11 декабря 2018

Я думаю, вы должны немного организовать свой код. Вот рабочий пример:

import tkinter as tk
import time
import threading


class Lingo(tk.Tk):
    def __init__(self, *args, **kwargs):
      tk.Tk.__init__(self, *args, **kwargs)

      self.m = tk.Frame(self)
      self.m.grid(row=0, column=0,sticky="nsew")

      self.e1 = tk.Entry(self.m)
      self.e1.grid(row=0, column=0)

      b1 = tk.Button(self.m, bg="blue", text="enter", command= lambda :self.enter())
      b1.grid(row=0, column=1)

    def enter(self):
      object_check = Check(parent=self)
      t1 = threading.Thread(target=object_check.get_entry)
      t1.start()

class Check():
    def __init__(self, parent):
      self.parent = parent

    def get_entry(self):
      entry_text = self.parent.e1.get()
      print(entry_text)

if __name__ == '__main__':

  t0 = threading.Thread(target=Lingo)
  t0.start()
  app = Lingo()
  app.wm_geometry("1810x1080")
  app.resizable(False, False)
  app.title("19 LetterWoordenLingo")
  app.mainloop()

Так что вам нужно инициализировать ваши виджеты.Затем, нажав кнопку, вы можете создать объект класса Check, который затем используется для доступа к функции, определенной в этом классе, через новый поток.

Надеюсь, это поможет.

0 голосов
/ 11 декабря 2018

Просто передайте переменную в методе __init__:

    (...)
    def enter():
        entry1 = e1.get()
        t1 = threading.Thread(target=check(entry1))
        t1.start()
    (...)    

class check():
    def __init__(self, entry1):
            (...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...