Как из ttk.Entry достать данные в следующие окно , что бы на основе их создать qrcod
Доброго времени суток rак из ttk.Entry достать данные в следующие окно , что бы на основе их создать qrcod
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import sqlite3
import pyqrcode
import png
class Main(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.init_main()
self.db = db
self.view_records()
def init_main(self):
toolbar = tk.Frame(bg='#d7d8e0', bd=2)
toolbar.pack(side=tk.TOP, fill=tk.X)
# Добавление кнопок управления
self.add_img = tk.PhotoImage(file='ADD.png') #ADD
btn_open_dialog = tk.Button(toolbar, text='Додати', command=self.open_dialog, bg='#d7d8e0', bd=0,
compound=tk.TOP, image=self.add_img)
btn_open_dialog.pack(side=tk.LEFT)
self.update_img = tk.PhotoImage(file='ADD.png') #redach
btn_edit_dialog = tk.Button(toolbar, text='Редукувати', bg='#d7d8e0', bd=0, image=self.update_img,
compound=tk.TOP, command=self.open_update_dialog)
btn_edit_dialog.pack(side=tk.LEFT)
self.delete_img = tk.PhotoImage(file='ADD.png') #Delete
btn_delete = tk.Button(toolbar, text='Видалити', bg='#d7d8e0', bd=0, image=self.delete_img,
compound=tk.TOP, command=self.delete_records)
btn_delete.pack(side=tk.LEFT)
self.search_img = tk.PhotoImage(file='ADD.png') #Shearh
btn_search = tk.Button(toolbar, text='Пошук', bg='#d7d8e0', bd=0, image=self.search_img,
compound=tk.TOP, command=self.open_search_dialog)
btn_search.pack(side=tk.LEFT)
self.refresh_img = tk.PhotoImage(file='ADD.png') #Obnovit
btn_refresh = tk.Button(toolbar, text='Обновити', bg='#d7d8e0', bd=0, image=self.refresh_img,
compound=tk.TOP, command=self.view_records)
btn_refresh.pack(side=tk.LEFT)
self.tree = ttk.Treeview(self, columns=('ID', 'mark', 'name', 'Kol', 'cena', 'polych', 'FIO', 'Adress', 'tel', 'ERDPOU', 'email', 'data', 'shetchik1'), height=15, show='headings')
#Расположение кнопок
self.tree.column('ID', width=30, anchor=tk.CENTER)
self.tree.column('mark', width=150, anchor=tk.CENTER)
self.tree.column('name', width=150, anchor=tk.CENTER)
self.tree.column('Kol', width=100, anchor=tk.CENTER)
self.tree.column('cena', width=100, anchor=tk.CENTER)
self.tree.column('polych', width=100, anchor=tk.CENTER)
self.tree.column('FIO', width=100, anchor=tk.CENTER)
self.tree.column('Adress', width=100, anchor=tk.CENTER)
self.tree.column('tel', width=100, anchor=tk.CENTER)
self.tree.column('ERDPOU', width=100, anchor=tk.CENTER)
self.tree.column('email', width=100, anchor=tk.CENTER)
self.tree.column('data', width=100, anchor=tk.CENTER)
self.tree.column('shetchik1', width=100, anchor=tk.CENTER)
#Подпись кнопок
self.tree.heading('ID', text='ID')
self.tree.heading('mark', text='Маркування Стандарту')
self.tree.heading('name', text='Назва Стандарту')
self.tree.heading('Kol', text='Кількість сторінок')
self.tree.heading('cena', text='Цена')
self.tree.heading('polych', text='ФІО')
self.tree.heading('FIO', text='Отримувач')
self.tree.heading('Adress', text='Адреса')
self.tree.heading('tel', text='Телефон')
self.tree.heading('ERDPOU', text='ЄРДПОУ')
self.tree.heading('email', text='Електронна адреса')
self.tree.heading('data', text='Дата')
self.tree.heading('shetchik1', text='shetchik1')
self.tree.pack()
# Функции кнопок
def records(self, mark, name_standart, kilkiststr, cena, FIO, polych, Adress, tel, ERDPOU, email, data, shetchik1): #Запись
self.db.insert_data(mark, name_standart, kilkiststr, cena, FIO, polych, Adress, tel, ERDPOU, email, data, shetchik1)
self.view_records()
def update_record(self, mark, name_standart, kilkiststr, cena, FIO, polych, Adress, tel, ERDPOU, email, data, shetchik1): #Обновить
self.db.c.execute('''UPDATE work SET mark=?, name_standart=?, kilkiststr=?, cena=?, FIO=?, polych=?, Adress=?, tel=?, ERDPOU=?, email=?, data=?, shetchik1=? WHERE ID=?''',
(mark, name_standart, kilkiststr, cena, FIO, polych, Adress, tel, ERDPOU, email, data, shetchik1, self.tree.set(self.tree.selection()[0], '#1')))
self.db.conn.commit()
self.view_records()
def view_records(self): #Просмотреть
self.db.c.execute('''SELECT * FROM work''')
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
def delete_records(self): #Удалить
for selection_item in self.tree.selection():
self.db.c.execute('''DELETE FROM work WHERE id=?''', (self.tree.set(selection_item, '#1'),))
self.db.conn.commit()
self.view_records()
def search_records(self, polych): #Поиск
polych = ('%' + polych + '%',)
self.db.c.execute('''SELECT * FROM work WHERE polych LIKE ?''', polych)
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
# Открытие окон
def open_dialog(self):
Child()
def open_update_dialog(self):
Update()
def open_search_dialog(self):
Search()
class Child(tk.Toplevel):
def __init__(self):
super().__init__(root)
self.init_child()
self.view = app
def init_child(self):
self.title('Додати')
self.geometry('400x720+400+300')
self.resizable(False, False)
label_mark = tk.Label(self, text='Маркування Стандарту:')
label_mark.place(x=50, y=50)
label_name_standart = tk.Label(self, text='Назва Стандарту:')
label_name_standart.place(x=50, y=80)
label_kilkiststr = tk.Label(self, text='Кількість сторінок:')
label_kilkiststr.place(x=50, y=110)
label_cena = tk.Label(self, text='Цена:')
label_cena.place(x=50, y=140)
label_FIO = tk.Label(self, text='ФІО:')
label_FIO.place(x=50, y=170)
label_polych = tk.Label(self, text='Отримувач:')
label_polych.place(x=50, y=200)
label_Adress = tk.Label(self, text='Адреса:')
label_Adress.place(x=50, y=230)
label_tel = tk.Label(self, text='Телефон:')
label_tel.place(x=50, y=260)
label_ERDPOU = tk.Label(self, text='ЄРДПОУ:')
label_ERDPOU.place(x=50, y=290)
label_email = tk.Label(self, text='Електронна адреса:')
label_email.place(x=50, y=320)
label_data = tk.Label(self, text='Дата:')
label_data.place(x=50, y=350)
label_shetchik1 = tk.Label(self, text='shetchik1:')
label_shetchik1.place(x=50, y=380)
self.entry_kilkiststr = ttk.Entry(self)
self.entry_kilkiststr.place(x=200, y=50)
self.entry_name_standart = ttk.Entry(self)
self.entry_name_standart.place(x=200, y=80)
self.entry_mark = ttk.Entry(self)
self.entry_mark.place(x=200, y=110)
self.entry_cena = ttk.Entry(self)
self.entry_cena.place(x=200, y=140)
self.entry_FIO = ttk.Entry(self)
self.entry_FIO.place(x=200, y=170)
self.entry_polych = ttk.Entry(self)
self.entry_polych.place(x=200, y=200)
self.entry_Adress = ttk.Entry(self)
self.entry_Adress.place(x=200, y=230)
self.entry_tel = ttk.Entry(self)
self.entry_tel.place(x=200, y=260)
self.entry_ERDPOU = ttk.Entry(self)
self.entry_ERDPOU.place(x=200, y=290)
self.entry_email = ttk.Entry(self)
self.entry_email.place(x=200, y=320)
self.entry_data = ttk.Entry(self)
self.entry_data.place(x=200, y=350)
self.entry_shetchik1 = ttk.Entry(self)
self.entry_shetchik1.place(x=200, y=380)
btn_cancel = ttk.Button(self, text='Закрити', command=self.destroy)
btn_cancel.place(x=300, y=480)
self.btn_ok = ttk.Button(self, text='Додати')
self.btn_ok.place(x=220, y=480)
self.btn_ok.bind('<Button-1>', lambda event: self.view.records(self.entry_kilkiststr.get(),
self.entry_name_standart.get(),
self.entry_mark.get(),
self.entry_cena.get(),
self.entry_FIO.get(),
self.entry_polych.get(),
self.entry_Adress.get(),
self.entry_tel.get(),
self.entry_ERDPOU.get(),
self.entry_email.get(),
self.entry_data.get(),
self.entry_shetchik1.get()))
self.btn = ttk.Button(self, text='Создать файл', command=Generate)
self.btn.place(x=50, y=480)
self.grab_set()
self.focus_set()
def Generate(self):
Window2()
class Generate(Child):
def __init__(self, *arg, **kwarg):
super().__init__(*arg, **kwarg)
self.init_gen()
self.view = app
def init_gen(self):
self.title('Создать файл')
self.geometry('400x200+250+350')
self.resizable(False, False)
def get_file_name():
file = filedialog.askopenfilename()
def GenerateQR():
name = entry_name_standart.get
text = pyqrcode.create(name)
text.png('test', scale=8)
self.btn1 = ttk.Button(self, text='Выбрать файл', command=get_file_name)
self.btn1.place(x=50, y=50)
self.btn2 = ttk.Button(self, text='QRCode', command=GenerateQR)
self.btn2.place(x=100, y=50)
class Update(Child):
def __init__(self):
super().__init__()
self.init_edit()
self.view = app
self.db = db
self.default_data()
def init_edit(self):
self.title('Редукувати')
btn_edit = ttk.Button(self, text='Редукувати')
btn_edit.place(x=205, y=170)
btn_edit.bind('<Button-1>', lambda event: self.view.update_record(self.entry_kilkiststr.get(),
self.entry_name_standart.get(),
self.entry_mark.get(),
self.entry_cena.get(),
self.entry_FIO.get(),
self.entry_polych.get(),
self.entry_Adress.get(),
self.entry_tel.get(),
self.entry_ERDPOU.get(),
self.entry_email.get(),
self.entry_data.get(),
self.entry_shetchik1.get()))
self.btn_ok.destroy()
def default_data(self):
self.db.c.execute('''SELECT * FROM work WHERE id=?''',
(self.view.tree.set(self.view.tree.selection()[0], '#1'),))
row = self.db.c.fetchone()
self.entry_mark.insert(0, row[1])
if row[2] != 'Доход':
self.name_standart.current(1)
self.entry_kilkiststr.insert(0, row[3])
class Search(tk.Toplevel):
def __init__(self):
super().__init__()
self.init_search()
self.view = app
def init_search(self):
self.title('Пошук')
self.geometry('300x100+400+300')
self.resizable(False, False)
label_search = tk.Label(self, text='Пошук')
label_search.place(x=50, y=20)
self.entry_search = ttk.Entry(self)
self.entry_search.place(x=105, y=20, width=150)
btn_cancel = ttk.Button(self, text='Закрити', command=self.destroy)
btn_cancel.place(x=185, y=50)
btn_search = ttk.Button(self, text='Пошук')
btn_search.place(x=105, y=50)
btn_search.bind('<Button-1>', lambda event: self.view.search_records(self.entry_search.get()))
btn_search.bind('<Button-1>', lambda event: self.destroy(), add='+')
class DB:
def __init__(self):
self.conn = sqlite3.connect('work.db')
self.c = self.conn.cursor()
self.c.execute(
'''CREATE TABLE IF NOT EXISTS work (id integer primary key, mark text, name_standart text, kilkiststr real,cena integer, FIO text, polych text, Adress text, tel integer, ERDPOU text, email text, data text, shetchik1 integer)''')
self.conn.commit()
def insert_data(self, mark, name_standart, kilkiststr, cena, FIO, polych, Adress, tel, ERDPOU, email, data, shetchik1):
self.c.execute('''INSERT INTO work(mark, name_standart, kilkiststr, cena, FIO, polych, Adress, tel, ERDPOU, email, data, shetchik1) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
(mark, name_standart, kilkiststr, cena, FIO, polych, Adress, tel, ERDPOU, email, data, shetchik1))
self.conn.commit()
if __name__ == "__main__":
root = tk.Tk()
db = DB()
app = Main(root)
app.pack()
root.title("Робота")
root.geometry("1450x450+0+0")
root.resizable(False, False)
root.mainloop()
А именно как те данные что я ввожу сюда
self.entry_kilkiststr = ttk.Entry(self)
self.entry_kilkiststr.place(x=200, y=50)
вытащить их для создания qrcod в следующем окне
class Generate(Child):
def __init__(self, *arg, **kwarg):
super().__init__(*arg, **kwarg)
self.init_gen()
self.view = app
def init_gen(self):
self.title('Создать файл')
self.geometry('400x200+250+350')
self.resizable(False, False)
def get_file_name():
file = filedialog.askopenfilename()
def GenerateQR():
name = entry_name_standart.get
text = pyqrcode.create(name)
text.png('test', scale=8)
self.btn1 = ttk.Button(self, text='Выбрать файл', command=get_file_name)
self.btn1.place(x=50, y=50)
self.btn2 = ttk.Button(self, text='QRCode', command=GenerateQR)
self.btn2.place(x=100, y=50)
Настройки окна с которого надо вытащить данные
class Child(tk.Toplevel):
def __init__(self):
super().__init__(root)
self.init_child()
self.view = app
def init_child(self):
self.title('Додати')
self.geometry('400x720+400+300')
self.resizable(False, False)
label_mark = tk.Label(self, text='Маркування Стандарту:')
label_mark.place(x=50, y=50)
label_name_standart = tk.Label(self, text='Назва Стандарту:')
label_name_standart.place(x=50, y=80)
label_kilkiststr = tk.Label(self, text='Кількість сторінок:')
label_kilkiststr.place(x=50, y=110)
label_cena = tk.Label(self, text='Цена:')
label_cena.place(x=50, y=140)
label_FIO = tk.Label(self, text='ФІО:')
label_FIO.place(x=50, y=170)
label_polych = tk.Label(self, text='Отримувач:')
label_polych.place(x=50, y=200)
label_Adress = tk.Label(self, text='Адреса:')
label_Adress.place(x=50, y=230)
label_tel = tk.Label(self, text='Телефон:')
label_tel.place(x=50, y=260)
label_ERDPOU = tk.Label(self, text='ЄРДПОУ:')
label_ERDPOU.place(x=50, y=290)
label_email = tk.Label(self, text='Електронна адреса:')
label_email.place(x=50, y=320)
label_data = tk.Label(self, text='Дата:')
label_data.place(x=50, y=350)
label_shetchik1 = tk.Label(self, text='shetchik1:')
label_shetchik1.place(x=50, y=380)
self.entry_kilkiststr = ttk.Entry(self)
self.entry_kilkiststr.place(x=200, y=50)
self.entry_name_standart = ttk.Entry(self)
self.entry_name_standart.place(x=200, y=80)
self.entry_mark = ttk.Entry(self)
self.entry_mark.place(x=200, y=110)
self.entry_cena = ttk.Entry(self)
self.entry_cena.place(x=200, y=140)
self.entry_FIO = ttk.Entry(self)
self.entry_FIO.place(x=200, y=170)
self.entry_polych = ttk.Entry(self)
self.entry_polych.place(x=200, y=200)
self.entry_Adress = ttk.Entry(self)
self.entry_Adress.place(x=200, y=230)
self.entry_tel = ttk.Entry(self)
self.entry_tel.place(x=200, y=260)
self.entry_ERDPOU = ttk.Entry(self)
self.entry_ERDPOU.place(x=200, y=290)
self.entry_email = ttk.Entry(self)
self.entry_email.place(x=200, y=320)
self.entry_data = ttk.Entry(self)
self.entry_data.place(x=200, y=350)
self.entry_shetchik1 = ttk.Entry(self)
self.entry_shetchik1.place(x=200, y=380)
btn_cancel = ttk.Button(self, text='Закрити', command=self.destroy)
btn_cancel.place(x=300, y=480)
self.btn_ok = ttk.Button(self, text='Додати')
self.btn_ok.place(x=220, y=480)
self.btn_ok.bind('<Button-1>', lambda event: self.view.records(self.entry_kilkiststr.get(),
self.entry_name_standart.get(),
self.entry_mark.get(),
self.entry_cena.get(),
self.entry_FIO.get(),
self.entry_polych.get(),
self.entry_Adress.get(),
self.entry_tel.get(),
self.entry_ERDPOU.get(),
self.entry_email.get(),
self.entry_data.get(),
self.entry_shetchik1.get()))
self.btn = ttk.Button(self, text='Создать файл', command=Generate)
self.btn.place(x=50, y=480)
self.grab_set()
self.focus_set()
def Generate(self):
Window2()
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Можно брать данные из текстового поля в обработчике нажатия на кнопку, потом передать как параметр в создаваемое окно.
import tkinter as tk
class MainWindow(tk.Tk):
def __init__(self):
super().__init__()
self.entry = tk.Entry(self)
self.entry.pack()
self.button = tk.Button(self, text='New window', command=self.new_window)
self.button.pack()
def new_window(self):
ChildWindow(parent=self, text=self.entry.get())
class ChildWindow(tk.Toplevel):
def __init__(self, parent, text):
super().__init__(parent)
self.label = tk.Label(self, text=text)
self.label.pack()
if __name__=='__main__':
main_window = MainWindow()
main_window.mainloop()