Найти - Пользователи
Полная версия: Listbox в Tkinter
Начало » GUI » Listbox в Tkinter
1 2 3 4 5 6
Alen
AZJIO
Кстати а нет ли случайно инструмента для автоматического приведения кода к корректному виду?

pip install autopep8
autopep8 myfile.py
autopep8 --aggressive --in-place myfile.py
AZJIO
4kpt_II
В чем работаете?
в Geany. Поставил на неделе PyCharm, так как видел целую тему в Инструментах, но пока не удаётся с ним работать. Не связываются файлы с ним (pycharm.sh), долго запускается, не работает Ctrl+A, Ctrl+C, Ctrl+V. В причинах пока не разбирался.
4kpt_II
Долго запускается это нормально Остальное странно
vrabey
AZJIO
не работает Ctrl+A, Ctrl+C, Ctrl+V
утилиту автоматической смены раскладки отключи попробуй
AZJIO
vrabey
У меня нет такой. Попробовал сделать английский дефолтным, первым,… заработало.
Yura_Lemeshko
AZJIO
Yura_LemeshkoТак что ли? Так то у вас всё есть в скрипте, манипулируйте. А задачу лучше сразу оговаривать, чтобы по 100 раз не переписывать.



Да, так. ) есть над чем позалипать.
Yura_Lemeshko
AZJIO
Yura_LemeshkoТак что ли? Так то у вас всё есть в скрипте, манипулируйте. А задачу лучше сразу оговаривать, чтобы по 100 раз не переписывать.


Теперь такие вопросики:
1. “Заказчик” не работают кнопки редактирования, выскакивают предупреждения.
2. В блоке “Общий вид работ” кнопки работают, но надо что бы, они сохраняли и редактировали по разрядах “КВР”, “Монтаж, п/н” и т. д.


Что подскажите?

# -*- coding: UTF-8 -*-
 
from tkinter import *
import tkinter.filedialog as fdialog
from tkinter import messagebox
from tkinter.messagebox import *
 
root = Tk()
root.geometry('800x550')
root.title('Окно оформления')
root.resizable(width = False, height = False)
##### 
##### Первый ряд #####
label_300 = Label(root, text = u"Загальний вид робiт:")
label_300.place(x = 70, y = 260 )
#######
edit2 = Entry(root)   # надо было тут edit ставить 
def box_1():
		
	global list1
	
	def read_file_to_lbox():
		try:
			f = open('lbox.txt', 'r') # Открывает файл для чтения
		except:
			# Генерируем пункты для примера (вариант 2)
			list1=["Генеририруем","Тестовый","Если","не найден","файл","lbox.txt"] # Массив данных для вставки в Listbox
			for i in list1: # Цикл вставки в Listbox
				lbox1.insert(END,i)
			return # Вылет, если не удалось открыть файл
		
		list1 = f.read() # Читает файл
		f.close() # Закрыть дескриптор файла
		list1 = list1.split('\n') # делит строку указаным разделителем, возвращая список
		for i in list1: # Цикл вставки в Listbox
			lbox1.insert(END,i)
	# ——————————————————————————————————————
	# Функция связанная с кнопкой сохранения
	
	def save_lbox_to_q_file():
		list_1=lbox1.get(0, END) # Получить все пункты списка
		string = ''
		for i in list_1: # Соединяем в строку
			string += i + '\n'
		string = string.rstrip('\n') # справа обрезает все символы, указанные в перечислении
		# sa = fdialog.asksaveasfilename(filetypes = [("Текстовые файлы", "*.txt")]) # вызов диалога сохранения
		try:
			f = open('lbox.txt', 'w') # Открывает файл для чтения
			# f = open(sa, 'w') # Открыть файл, режим добавления
		except:
			# print("Could not open File: ")
			# print(sys.exc_info()[1])
			return # Вылет, если не удалось открыть файл
		f.write(string) # пишем строку пунктов в файл
		f.close() # Закрываем файл после записи
		#root.quit()
	# ——————————————————————————————————————
	# Функция связанная с выбором в Listbox
	def lbox_item_to_q_entry(evt):
		inx = lbox1.index(ANCHOR) # получаем индекс пункта
		if inx > lbox1.size() - 1: # Защита от применения действий к пункту без его выбора, список может быть пуст
			# print ('выберите пункт для начала')
			return
		value = lbox1.get(inx) # Получить выделенное
		edit2.delete(0, END) # очищает поле ввода
		edit2.insert(0,value) # вставляет текст в поле ввода
	# ——————————————————————————————————————
	# Функция вставки
	def lbox_added_q_item():
		text = str(edit1.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			lbox1.insert(END,text) # Вставляет в конец списка
			edit2.delete(0, END) # очищает поле ввода
			# lbox1.insert(3,'- "' + text + '" - вставлен в поз:3') # Вставляет в позицию 3
		else:
			showwarning('Предупреждение', 'Укажите текст добавляемого пункта')
	# ——————————————————————————————————————
	# Функция редактирования
	def lbox_edit_q_item():
		text = str(edit1.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			# print (text)
			# inx = lbox1.get(ACTIVE) # получаем текст пункта
			inx = lbox1.index(ANCHOR) # получаем индекс пункта
			if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
				showwarning('Предупреждение', 'Выберите пункт для редактирования')
				# print ('выберите пункт для начала')
				return
			lbox1.delete(inx) # удаляем пункт по индексу
			lbox1.insert(inx, text) # Вставляет пункт по индексу
			# lbox1.insert(inx, text + ' (удача ?)') # Для визуального теста
			edit2.delete(0, END) # очищает поле ввода
		else:
			showwarning('Предупреждение', 'Укажите новый текст пункта')
	# ——————————————————————————————————————
	# Функция удаления
	#def lbox_delete_item():
		#inx = lbox1.index(ANCHOR) # получаем индекс пункта
		#if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
			#showwarning('Предупреждение', 'Выберите пункт для удаления')
			#return
		#lbox1.delete(inx) # удаляет пункт по индексу
	
#	label_1 = Label(root, text = 'Замовник: ') # Создаём лейбл
#	label_1.place(x = 300, y = 10) # Задаём координаты лейбла
	lbox1 = Listbox(root, width = 30) # Создаём список (, selectmode=MULTIPLE) (http://effbot.org/tkinterbook/listbox.htm)
	lbox1.place(x=200, y = 280) # Добавляем в слот grid с отступами
	read_file_to_lbox()
	#edit2 = Entry(root, width = 30) # Создаём поле ввода
	edit2.place(x = 300, y = 250) # Добавляем в слот grid
	# Связали (забиндили) событие выбора в Listbox с функцией "list_to_entry"
	lbox1.bind('<<ListboxSelect>>', lbox_item_to_q_entry)
	# Создаём кнопки и вязываем с функциями
	button_1 = Button(root, text = '+', command = lbox_added_q_item)
	button_1.pack()
	button_1.place(x = 300, y = 440) # Если кнопку делаем в root, то координируем
	#button_2 = Button(root, text = '-', command = lbox_delete_item)
	#button_2.pack()
	#button_2.place(x = 50, y = 250) # Если кнопку делаем в root, то координируем
	button_3 = Button(root, text = 'Правка', command = lbox_edit_q_item)
	button_3.pack()
	button_3.place(x = 390, y = 440) # Если кнопку делаем в root, то координируем
	button_4 = Button(root, text = 'Сохранить', command = save_lbox_to_q_file)
	button_4.pack()
	button_4.place(x =320, y = 440) # Если кнопку делаем в root, то координируем
 	
#####
edit2 = Entry(root)
def box_2():
		
	global list2
	def read_file_to_lbox():
		try:
			f = open('lbox.txt', 'r') # Открывает файл для чтения
		except:
			# Генерируем пункты для примера (вариант 2)
			list2=["Генеририруем","Тестовый","Если","не найден","файл","lbox.txt"] # Массив данных для вставки в Listbox
			for i in list1: # Цикл вставки в Listbox
				lbox1.insert(END,i)
			return # Вылет, если не удалось открыть файл
		
		list2 = f.read() # Читает файл
		f.close() # Закрыть дескриптор файла
		list2 = list2.split('\n') # делит строку указаным разделителем, возвращая список
		for i in list2: # Цикл вставки в Listbox
			lbox1.insert(END,i)
	# ——————————————————————————————————————
	# Функция связанная с кнопкой сохранения
	
	def save_lbox_to_q_file():
		list2=lbox1.get(0, END) # Получить все пункты списка
		string = ''
		for i in list2: # Соединяем в строку
			string += i + '\n'
		string = string.rstrip('\n') # справа обрезает все символы, указанные в перечислении
		# sa = fdialog.asksaveasfilename(filetypes = [("Текстовые файлы", "*.txt")]) # вызов диалога сохранения
		try:
			f = open('lbox.txt', 'w') # Открывает файл для чтения
			# f = open(sa, 'w') # Открыть файл, режим добавления
		except:
			# print("Could not open File: ")
			# print(sys.exc_info()[1])
			return # Вылет, если не удалось открыть файл
		f.write(string) # пишем строку пунктов в файл
		f.close() # Закрываем файл после записи
		#root.quit()
	# ——————————————————————————————————————
	# Функция связанная с выбором в Listbox
	def lbox_item_to_q_entry(evt):
		inx = lbox1.index(ANCHOR) # получаем индекс пункта
		if inx > lbox1.size() - 1: # Защита от применения действий к пункту без его выбора, список может быть пуст
			# print ('выберите пункт для начала')
			return
		value = lbox1.get(inx) # Получить выделенное
		edit2.delete(0, END) # очищает поле ввода
		edit2.insert(0,value) # вставляет текст в поле ввода
	# ——————————————————————————————————————
	# Функция вставки
	def lbox_added_q_item():
		text = str(edit2.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			lbox1.insert(END,text) # Вставляет в конец списка
			edit2.delete(0, END) # очищает поле ввода
			# lbox1.insert(3,'- "' + text + '" - вставлен в поз:3') # Вставляет в позицию 3
		else:
			showwarning('Предупреждение', 'Укажите текст добавляемого пункта')
	# ——————————————————————————————————————
	# Функция редактирования
	def lbox_edit_q_item():
		text = str(edit2.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			# print (text)
			# inx = lbox1.get(ACTIVE) # получаем текст пункта
			inx = lbox1.index(ANCHOR) # получаем индекс пункта
			if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
				showwarning('Предупреждение', 'Выберите пункт для редактирования')
				# print ('выберите пункт для начала')
				return
			lbox1.delete(inx) # удаляем пункт по индексу
			lbox1.insert(inx, text) # Вставляет пункт по индексу
			# lbox1.insert(inx, text + ' (удача ?)') # Для визуального теста
			edit2.delete(0, END) # очищает поле ввода
		else:
			showwarning('Предупреждение', 'Укажите новый текст пункта')
	# ——————————————————————————————————————
	# Функция удаления
	#def lbox_delete_item():
		#inx = lbox1.index(ANCHOR) # получаем индекс пункта
		#if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
			#showwarning('Предупреждение', 'Выберите пункт для удаления')
			#return
		#lbox1.delete(inx) # удаляет пункт по индексу
	
#	label_1 = Label(root, text = 'Замовник: ') # Создаём лейбл
#	label_1.place(x = 300, y = 10) # Задаём координаты лейбла
	lbox1 = Listbox(root, width = 30) # Создаём список (, selectmode=MULTIPLE) (http://effbot.org/tkinterbook/listbox.htm)
	lbox1.place(x=200, y = 280) # Добавляем в слот grid с отступами
	read_file_to_lbox()
	#edit2 = Entry(root, width = 30) # Создаём поле ввода
	edit2.place(x = 300, y = 250) # Добавляем в слот grid
	# Связали (забиндили) событие выбора в Listbox с функцией "list_to_entry"
	lbox1.bind('<<ListboxSelect>>', lbox_item_to_q_entry)
	# Создаём кнопки и вязываем с функциями
	button_6 = Button(root, text = '+', command = lbox_added_q_item)
	button_6.pack()
	button_6.place(x = 300, y = 440) # Если кнопку делаем в root, то координируем
	#button_2 = Button(root, text = '-', command = lbox_delete_item)
	#button_2.pack()
	#button_2.place(x = 50, y = 250) # Если кнопку делаем в root, то координируем
	button_7 = Button(root, text = 'Правка', command = lbox_edit_q_item)
	button_7.pack()
	button_7.place(x = 390, y = 440) # Если кнопку делаем в root, то координируем
	button_8 = Button(root, text = 'Сохранить', command = save_lbox_to_q_file)
	button_8.pack()
	button_8.place(x =320, y = 440) # Если кнопку делаем в root, то координируем
#####
edit2 = Entry(root)
def box_3():
	
	global list3
	def read_file_to_lbox():
		try:
			f = open('lbox.txt', 'r') # Открывает файл для чтения
		except:
			# Генерируем пункты для примера (вариант 2)
			list3=["Генеририруем","Тестовый","Если","не найден","файл","lbox.txt"] # Массив данных для вставки в Listbox
			for i in list3: # Цикл вставки в Listbox
				lbox1.insert(END,i)
			return # Вылет, если не удалось открыть файл
		
		list3 = f.read() # Читает файл
		f.close() # Закрыть дескриптор файла
		list3 = list3.split('\n') # делит строку указаным разделителем, возвращая список
		for i in list3: # Цикл вставки в Listbox
			lbox1.insert(END,i)
	# ——————————————————————————————————————
	# Функция связанная с кнопкой сохранения
	
	def save_lbox_to_q_file():
		list3=lbox1.get(0, END) # Получить все пункты списка
		string = ''
		for i in list3: # Соединяем в строку
			string += i + '\n'
		string = string.rstrip('\n') # справа обрезает все символы, указанные в перечислении
		# sa = fdialog.asksaveasfilename(filetypes = [("Текстовые файлы", "*.txt")]) # вызов диалога сохранения
		try:
			f = open('lbox.txt', 'w') # Открывает файл для чтения
			# f = open(sa, 'w') # Открыть файл, режим добавления
		except:
			# print("Could not open File: ")
			# print(sys.exc_info()[1])
			return # Вылет, если не удалось открыть файл
		f.write(string) # пишем строку пунктов в файл
		f.close() # Закрываем файл после записи
		#root.quit()
	# ——————————————————————————————————————
	# Функция связанная с выбором в Listbox
	def lbox_item_to_q_entry(evt):
		inx = lbox1.index(ANCHOR) # получаем индекс пункта
		if inx > lbox1.size() - 1: # Защита от применения действий к пункту без его выбора, список может быть пуст
			# print ('выберите пункт для начала')
			return
		value = lbox1.get(inx) # Получить выделенное
		edit2.delete(0, END) # очищает поле ввода
		edit2.insert(0,value) # вставляет текст в поле ввода
	# ——————————————————————————————————————
	# Функция вставки
	def lbox_added_q_item():
		text = str(edit2.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			lbox1.insert(END,text) # Вставляет в конец списка
			edit2.delete(0, END) # очищает поле ввода
			# lbox1.insert(3,'- "' + text + '" - вставлен в поз:3') # Вставляет в позицию 3
		else:
			showwarning('Предупреждение', 'Укажите текст добавляемого пункта')
	# ——————————————————————————————————————
	# Функция редактирования
	def lbox_edit_q_item():
		text = str(edit2.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			# print (text)
			# inx = lbox1.get(ACTIVE) # получаем текст пункта
			inx = lbox1.index(ANCHOR) # получаем индекс пункта
			if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
				showwarning('Предупреждение', 'Выберите пункт для редактирования')
				# print ('выберите пункт для начала')
				return
			lbox1.delete(inx) # удаляем пункт по индексу
			lbox1.insert(inx, text) # Вставляет пункт по индексу
			# lbox1.insert(inx, text + ' (удача ?)') # Для визуального теста
			edit2.delete(0, END) # очищает поле ввода
		else:
			showwarning('Предупреждение', 'Укажите новый текст пункта')
	# ——————————————————————————————————————
	# Функция удаления
	#def lbox_delete_item():
		#inx = lbox1.index(ANCHOR) # получаем индекс пункта
		#if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
			#showwarning('Предупреждение', 'Выберите пункт для удаления')
			#return
		#lbox1.delete(inx) # удаляет пункт по индексу
	
#	label_1 = Label(root, text = 'Замовник: ') # Создаём лейбл
#	label_1.place(x = 300, y = 10) # Задаём координаты лейбла
	lbox1 = Listbox(root, width = 30) # Создаём список (, selectmode=MULTIPLE) (http://effbot.org/tkinterbook/listbox.htm)
	lbox1.place(x=200, y = 280) # Добавляем в слот grid с отступами
	read_file_to_lbox()
	#edit2 = Entry(root, width = 30) # Создаём поле ввода
	edit2.place(x = 300, y = 250) # Добавляем в слот grid
	# Связали (забиндили) событие выбора в Listbox с функцией "list_to_entry"
	lbox1.bind('<<ListboxSelect>>', lbox_item_to_q_entry)
	# Создаём кнопки и вязываем с функциями
	button_6 = Button(root, text = '+', command = lbox_added_q_item)
	button_6.pack()
	button_6.place(x = 300, y = 440) # Если кнопку делаем в root, то координируем
	#button_2 = Button(root, text = '-', command = lbox_delete_item)
	#button_2.pack()
	#button_2.place(x = 50, y = 250) # Если кнопку делаем в root, то координируем
	button_7 = Button(root, text = 'Правка', command = lbox_edit_q_item)
	button_7.pack()
	button_7.place(x = 390, y = 440) # Если кнопку делаем в root, то координируем
	button_8 = Button(root, text = 'Сохранить', command = save_lbox_to_q_file)
	button_8.pack()
	button_8.place(x =320, y = 440) # Если кнопку делаем в root, то координируем
#####		
edit2 = Entry(root)
def box_4():
	
	global list_4
	def read_file_to_lbox():
		try:
			f = open('lbox.txt', 'r') # Открывает файл для чтения
		except:
			# Генерируем пункты для примера (вариант 2)
			list_4=["Генеририруем","Тестовый","Если","не найден","файл","lbox.txt"] # Массив данных для вставки в Listbox
			for i in list_4: # Цикл вставки в Listbox
				lbox1.insert(END,i)
			return # Вылет, если не удалось открыть файл
		
		list_4 = f.read() # Читает файл
		f.close() # Закрыть дескриптор файла
		list_4 = list_4.split('\n') # делит строку указаным разделителем, возвращая список
		for i in list_4: # Цикл вставки в Listbox
			lbox1.insert(END,i)
	# ——————————————————————————————————————
	# Функция связанная с кнопкой сохранения
	
	def save_lbox_to_q_file():
		list_4=lbox1.get(0, END) # Получить все пункты списка
		string = ''
		for i in list1: # Соединяем в строку
			string += i + '\n'
		string = string.rstrip('\n') # справа обрезает все символы, указанные в перечислении
		# sa = fdialog.asksaveasfilename(filetypes = [("Текстовые файлы", "*.txt")]) # вызов диалога сохранения
		try:
			f = open('lbox.txt', 'w') # Открывает файл для чтения
			# f = open(sa, 'w') # Открыть файл, режим добавления
		except:
			# print("Could not open File: ")
			# print(sys.exc_info()[1])
			return # Вылет, если не удалось открыть файл
		f.write(string) # пишем строку пунктов в файл
		f.close() # Закрываем файл после записи
		#root.quit()
	# ——————————————————————————————————————
	# Функция связанная с выбором в Listbox
	def lbox_item_to_q_entry(evt):
		inx = lbox1.index(ANCHOR) # получаем индекс пункта
		if inx > lbox1.size() - 1: # Защита от применения действий к пункту без его выбора, список может быть пуст
			# print ('выберите пункт для начала')
			return
		value = lbox1.get(inx) # Получить выделенное
		edit2.delete(0, END) # очищает поле ввода
		edit2.insert(0,value) # вставляет текст в поле ввода
	# ——————————————————————————————————————
	# Функция вставки
	def lbox_added_q_item():
		text = str(edit2.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			lbox1.insert(END,text) # Вставляет в конец списка
			edit2.delete(0, END) # очищает поле ввода
			# lbox1.insert(3,'- "' + text + '" - вставлен в поз:3') # Вставляет в позицию 3
		else:
			showwarning('Предупреждение', 'Укажите текст добавляемого пункта')
	# ——————————————————————————————————————
	# Функция редактирования
	def lbox_edit_q_item():
		text = str(edit2.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			# print (text)
			# inx = lbox1.get(ACTIVE) # получаем текст пункта
			inx = lbox1.index(ANCHOR) # получаем индекс пункта
			if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
				showwarning('Предупреждение', 'Выберите пункт для редактирования')
				# print ('выберите пункт для начала')
				return
			lbox1.delete(inx) # удаляем пункт по индексу
			lbox1.insert(inx, text) # Вставляет пункт по индексу
			# lbox1.insert(inx, text + ' (удача ?)') # Для визуального теста
			edit1.delete(0, END) # очищает поле ввода
		else:
			showwarning('Предупреждение', 'Укажите новый текст пункта')
	# ——————————————————————————————————————
	# Функция удаления
	#def lbox_delete_item():
		#inx = lbox1.index(ANCHOR) # получаем индекс пункта
		#if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
			#showwarning('Предупреждение', 'Выберите пункт для удаления')
			#return
		#lbox1.delete(inx) # удаляет пункт по индексу
	
#	label_1 = Label(root, text = 'Замовник: ') # Создаём лейбл
#	label_1.place(x = 300, y = 10) # Задаём координаты лейбла
	lbox1 = Listbox(root, width = 30) # Создаём список (, selectmode=MULTIPLE) (http://effbot.org/tkinterbook/listbox.htm)
	lbox1.place(x=200, y = 280) # Добавляем в слот grid с отступами
	read_file_to_lbox()
	#edit2 = Entry(root, width = 30) # Создаём поле ввода
	edit2.place(x = 300, y = 250) # Добавляем в слот grid
	# Связали (забиндили) событие выбора в Listbox с функцией "list_to_entry"
	lbox1.bind('<<ListboxSelect>>', lbox_item_to_q_entry)
	# Создаём кнопки и вязываем с функциями
	button_6 = Button(root, text = '+', command = lbox_added_q_item)
	button_6.pack()
	button_6.place(x = 300, y = 440) # Если кнопку делаем в root, то координируем
	#button_2 = Button(root, text = '-', command = lbox_delete_item)
	#button_2.pack()
	#button_2.place(x = 50, y = 250) # Если кнопку делаем в root, то координируем
	button_7 = Button(root, text = 'Правка', command = lbox_edit_q_item)
	button_7.pack()
	button_7.place(x = 390, y = 440) # Если кнопку делаем в root, то координируем
	button_8 = Button(root, text = 'Сохранить', command = save_lbox_to_q_file)
	button_8.pack()
	button_8.place(x =320, y = 440) # Если кнопку делаем в root, то координируем
#####
global varVR
varVR = IntVar()
		
frame_1 = Frame(root, bg = 'red', bd = 2)
rb1 = Radiobutton(frame_1, text = u'КВР', command = box_1,variable=varVR,value=1)
rb1.pack()
frame_1.place(x = 50, y = 280 )
#####
frame_1 = Frame(root, bg = 'red', bd = 2)
rb2 = Radiobutton(frame_1, text = u'Монтаж, п/н', command = box_2,variable=varVR,value=2)
rb2.pack()
frame_1.place(x = 50, y = 305 )
#####
frame_1 = Frame(root, bg = 'red', bd = 2)
rb3 = Radiobutton(frame_1, text = u'Проектнi роботи', command = box_3,variable=varVR,value=3)
rb3.pack()
frame_1.place(x = 50, y = 330 )
#####
frame_1 = Frame(root, bg = 'red', bd = 2)
rb4 = Radiobutton(frame_1, text = u'Огляди, ЕО, атестацiя', command = box_4,variable=varVR,value=4)
rb4.pack()
frame_1.place(x = 50, y = 355 )
#####--------------------- Второй ряд--------------- #####
# ——————————————————————————————————————
# Функция чтения файла в Listbox
def read_file_to_lbox():
	try:
		f = open('lbox.txt', 'r') # Открывает файл для чтения
	except:
		# Генерируем пункты для примера (вариант 2)
		list1=["Генеририруем","Тестовый","Если","не найден","файл","lbox.txt"] # Массив данных для вставки в Listbox
		for i in list1: # Цикл вставки в Listbox
			lbox1.insert(END,i)
		return # Вылет, если не удалось открыть файл
	
	list1 = f.read() # Читает файл
	f.close() # Закрыть дескриптор файла
	list1 = list1.split('\n') # делит строку указаным разделителем, возвращая список
	for i in list1: # Цикл вставки в Listbox
		lbox1.insert(END,i)
# ——————————————————————————————————————
# Функция связанная с кнопкой сохранения
def save_lbox_to_file():
	list1=lbox1.get(0, END) # Получить все пункты списка
	string = ''
	for i in list1: # Соединяем в строку
		string += i + '\n'
	string = string.rstrip('\n') # справа обрезает все символы, указанные в перечислении
	# sa = fdialog.asksaveasfilename(filetypes = [("Текстовые файлы", "*.txt")]) # вызов диалога сохранения
	try:
		f = open('lbox.txt', 'w') # Открывает файл для чтения
		# f = open(sa, 'w') # Открыть файл, режим добавления
	except:
		# print("Could not open File: ")
		# print(sys.exc_info()[1])
		return # Вылет, если не удалось открыть файл
	f.write(string) # пишем строку пунктов в файл
	f.close() # Закрываем файл после записи
	#root.quit()
# ——————————————————————————————————————
# Функция связанная с выбором в Listbox
def lbox_item_to_entry(evt):
	inx = lbox1.index(ANCHOR) # получаем индекс пункта
	if inx > lbox1.size() - 1: # Защита от применения действий к пункту без его выбора, список может быть пуст
		# print ('выберите пункт для начала')
		return
	value = lbox1.get(inx) # Получить выделенное
	edit1.delete(0, END) # очищает поле ввода
	edit1.insert(0,value) # вставляет текст в поле ввода
# ——————————————————————————————————————
# Функция вставки
def lbox_added_item():
	text = str(edit2.get()) # Читаем поле ввода
	if not (text==''): # Проверяем что текст не пустой, перед вставкой
		lbox1.insert(END,text) # Вставляет в конец списка
		edit1.delete(0, END) # очищает поле ввода
		# lbox1.insert(3,'- "' + text + '" - вставлен в поз:3') # Вставляет в позицию 3
	else:
		showwarning('Предупреждение', 'Укажите текст добавляемого пункта')
# ——————————————————————————————————————
# Функция редактирования
def lbox_edit_item():
	text = str(edit2.get()) # Читаем поле ввода
	if not (text==''): # Проверяем что текст не пустой, перед вставкой
		# print (text)
		# inx = lbox1.get(ACTIVE) # получаем текст пункта
		inx = lbox1.index(ANCHOR) # получаем индекс пункта
		if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
			showwarning('Предупреждение', 'Выберите пункт для редактирования')
			# print ('выберите пункт для начала')
			return
		lbox1.delete(inx) # удаляем пункт по индексу
		lbox1.insert(inx, text) # Вставляет пункт по индексу
		# lbox1.insert(inx, text + ' (удача ?)') # Для визуального теста
		edit1.delete(0, END) # очищает поле ввода
	else:
		showwarning('Предупреждение', 'Укажите новый текст пункта')
# ——————————————————————————————————————
# Функция удаления
#def lbox_delete_item():
	#inx = lbox1.index(ANCHOR) # получаем индекс пункта
	#if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
		#showwarning('Предупреждение', 'Выберите пункт для удаления')
		#return
	#lbox1.delete(inx) # удаляет пункт по индексу
label_1 = Label(root, text = 'Замовник: ') # Создаём лейбл
label_1.place(x = 300, y = 10) # Задаём координаты лейбла
lbox1 = Listbox(root, width = 30) # Создаём список (, selectmode=MULTIPLE) (http://effbot.org/tkinterbook/listbox.htm)
lbox1.grid(padx=300, pady = 30) # Добавляем в слот grid с отступами
read_file_to_lbox()
edit1 = Entry(root, width = 30) # Создаём поле ввода
edit1.grid() # Добавляем в слот grid
# Связали (забиндили) событие выбора в Listbox с функцией "list_to_entry"
lbox1.bind('<<ListboxSelect>>', lbox_item_to_entry)
# Создаём кнопки и вязываем с функциями
button_1 = Button(root, text = '+', command = lbox_added_item)
button_1.pack()
button_1.place(x = 300, y = 195) # Если кнопку делаем в root, то координируем
#button_2 = Button(root, text = '-', command = lbox_delete_item)
#button_2.pack()
#button_2.place(x = 50, y = 250) # Если кнопку делаем в root, то координируем
button_3 = Button(root, text = 'Правка', command = lbox_edit_item)
button_3.pack()
button_3.place(x = 390, y = 195) # Если кнопку делаем в root, то координируем
button_5 = Button(root, text = 'Сохранить', command = save_lbox_to_file)
button_5.pack()
button_5.place(x =320, y = 195) # Если кнопку делаем в root, то координируем
 
#------------------------------------------SAVE_AS_START------------------------------------------------------------------------
def save_as():
	      
        
	if askyesno("Save As?", "Зберегти введенне?"):
		
                       
#Объявление переменных
		
                zamownik = ' Замовник ' + str(edit1.get())
                zag_rob = ' Вид виконаних робiт ' + str(edit2.get()) 
                 
                      
                if (varVR.get() == 1):
                        wid_rabot = ' Загальний вид робiт: ' + rb1['text']
                elif (varVR.get() == 2):
                        wid_rabot = ' Загальний вид робiт: ' + rb2['text']
                elif (varVR.get() == 3):
                        wid_rabot = ' Загальний вид робiт: ' + rb3['text']
                elif (varVR.get() == 4):
                        wid_rabot = ' Загальний вид робiт: ' + rb4['text']
               ###############      
                print ('\n', zamownik, '\n',
                        zag_rob, '\n',
                        wid_rabot, '\n',			'-------------------------------------------------------------')
       
                list_1 = ['\n', zamownik, '\n',
                        zag_rob, '\n',
                        wid_rabot, '\n']
       
                sa = fdialog.asksaveasfilename(filetypes = [('all files', '.*'), ('xls files', '.xls'),('doc files', '.doc')]) # собственно, само сохранение
                f = open(sa, 'a')
                for i in list_1:                
                        f.write(i)
                f.close()
# Список фиг запишешь в фаил,
# пришлось циклично записывать по строкам   
#----------------------------------------------------SAVE_AS_END--------------------------------------------------------------------------------------------
frame_1 = Frame(root, bg = 'red', bd = 2)
button_0 = Button(frame_1, text = u'Зберегти', command = save_as)
button_0.pack()
frame_1.place(x = 400, y = 500 )
root.mainloop()
4kpt_II
AZJIO уже в бане.
По-вашему вопросу. Разделите Вашу программу на отдельные задачи. Для каждой задачи напишите свой модуль. Там же и разместите все виджеты. И выкладывайте конкретно тот модуль, где появились проблемы. Просто это огромный код. Его никто читать в таком количестве не будет.
Yura_Lemeshko
4kpt_II
AZJIO уже в бане.По-вашему вопросу. Разделите Вашу программу на отдельные задачи. Для каждой задачи напишите свой модуль. Там же и разместите все виджеты. И выкладывайте конкретно тот модуль, где появились проблемы. Просто это огромный код. Его никто читать в таком количестве не будет.


Вышеперечисленые приступы истерики решил. Теперь вот такой вопрос, при заполнении “Замовник” и “Загальний вид робіт” все работает так-как надо, сохранили, закрыли. Открываем и видим что те значения которые ввели допустим в “Замовник” отображаются и в “Загальний вид робіт”.
P.S. На кнопку удаления — “-” не обращайте внимания.

Почему его забанили?

# -*- coding: UTF-8 -*-
 
from tkinter import *
import tkinter.filedialog as fdialog
from tkinter import messagebox
from tkinter.messagebox import *
 
root = Tk()
root.geometry('800x550')
root.title('Окно оформления')
root.resizable(width = False, height = False)
##### 
##### Первый ряд #####
label_300 = Label(root, text = u"Загальний вид робiт:")
label_300.place(x = 70, y = 260 )
#######
edit2 = Entry(root)   # надо было тут edit ставить 
def box_1():
		
	global list1
	
	def read_file_to_lbox():
		try:
			f = open('lbox.txt', 'r') # Открывает файл для чтения
		except:
			# Генерируем пункты для примера (вариант 2)
			list1=["Генеририруем","Тестовый","Если","не найден","файл","lbox.txt"] # Массив данных для вставки в Listbox
			for i in list1: # Цикл вставки в Listbox
				lbox1.insert(END,i)
			return # Вылет, если не удалось открыть файл
		
		list1 = f.read() # Читает файл
		f.close() # Закрыть дескриптор файла
		list1 = list1.split('\n') # делит строку указаным разделителем, возвращая список
		for i in list1: # Цикл вставки в Listbox
			lbox1.insert(END,i)
	# ——————————————————————————————————————
	# Функция связанная с кнопкой сохранения
	
	def save_lbox_to_q_file():
		list_1=lbox1.get(0, END) # Получить все пункты списка
		string = ''
		for i in list_1: # Соединяем в строку
			string += i + '\n'
		string = string.rstrip('\n') # справа обрезает все символы, указанные в перечислении
		# sa = fdialog.asksaveasfilename(filetypes = [("Текстовые файлы", "*.txt")]) # вызов диалога сохранения
		try:
			f = open('lbox.txt', 'w') # Открывает файл для чтения
			# f = open(sa, 'w') # Открыть файл, режим добавления
		except:
			# print("Could not open File: ")
			# print(sys.exc_info()[1])
			return # Вылет, если не удалось открыть файл
		f.write(string) # пишем строку пунктов в файл
		f.close() # Закрываем файл после записи
		#root.quit()
	# ——————————————————————————————————————
	# Функция связанная с выбором в Listbox
	def lbox_item_to_q_entry(evt):
		inx = lbox1.index(ANCHOR) # получаем индекс пункта
		if inx > lbox1.size() - 1: # Защита от применения действий к пункту без его выбора, список может быть пуст
			# print ('выберите пункт для начала')
			return
		value = lbox1.get(inx) # Получить выделенное
		edit2.delete(0, END) # очищает поле ввода
		edit2.insert(0,value) # вставляет текст в поле ввода
	# ——————————————————————————————————————
	# Функция вставки
	def lbox_added_q_item():
		text = str(edit2.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			lbox1.insert(END,text) # Вставляет в конец списка
			edit2.delete(0, END) # очищает поле ввода
			# lbox1.insert(3,'- "' + text + '" - вставлен в поз:3') # Вставляет в позицию 3
		else:
			showwarning('Предупреждение', 'Укажите текст добавляемого пункта')
	# ——————————————————————————————————————
	# Функция редактирования
	def lbox_edit_q_item():
		text = str(edit2.get()) # Читаем поле ввода
		if not (text==''): # Проверяем что текст не пустой, перед вставкой
			# print (text)
			# inx = lbox1.get(ACTIVE) # получаем текст пункта
			inx = lbox1.index(ANCHOR) # получаем индекс пункта
			if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
				showwarning('Предупреждение', 'Выберите пункт для редактирования')
				# print ('выберите пункт для начала')
				return
			lbox1.delete(inx) # удаляем пункт по индексу
			lbox1.insert(inx, text) # Вставляет пункт по индексу
			# lbox1.insert(inx, text + ' (удача ?)') # Для визуального теста
			edit2.delete(0, END) # очищает поле ввода
		else:
			showwarning('Предупреждение', 'Укажите новый текст пункта')
	# ——————————————————————————————————————
	# Функция удаления
	def lbox_delete_item():
		inx = lbox1.index(ANCHOR) # получаем индекс пункта
		if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
			showwarning('Предупреждение', 'Выберите пункт для удаления')
			return
		lbox1.delete(inx) # удаляет пункт по индексу
	
#	label_1 = Label(root, text = 'Замовник: ') # Создаём лейбл
#	label_1.place(x = 300, y = 10) # Задаём координаты лейбла
	lbox1 = Listbox(root, width = 30) # Создаём список (, selectmode=MULTIPLE) (http://effbot.org/tkinterbook/listbox.htm)
	lbox1.place(x=200, y = 280) # Добавляем в слот grid с отступами
	read_file_to_lbox()
	#edit2 = Entry(root, width = 30) # Создаём поле ввода
	edit2.place(x = 300, y = 250) # Добавляем в слот grid
	# Связали (забиндили) событие выбора в Listbox с функцией "list_to_entry"
	lbox1.bind('<<ListboxSelect>>', lbox_item_to_q_entry)
	# Создаём кнопки и вязываем с функциями
	button_1 = Button(root, text = '+', command = lbox_added_q_item)
	button_1.pack()
	button_1.place(x = 300, y = 440) # Если кнопку делаем в root, то координируем
	button_2 = Button(root, text = '-', command = lbox_delete_item)
	button_2.pack()
	button_2.place(x = 50, y = 250) # Если кнопку делаем в root, то координируем
	button_3 = Button(root, text = 'Правка', command = lbox_edit_q_item)
	button_3.pack()
	button_3.place(x = 390, y = 440) # Если кнопку делаем в root, то координируем
	button_4 = Button(root, text = 'Сохранить', command = save_lbox_to_q_file)
	button_4.pack()
	button_4.place(x =320, y = 440) # Если кнопку делаем в root, то координируем
 	
#####
#####
global varVR
varVR = IntVar()
		
frame_1 = Frame(root, bg = 'red', bd = 2)
rb1 = Radiobutton(frame_1, text = u'КВР', command = box_1,variable=varVR,value=1)
rb1.pack()
frame_1.place(x = 50, y = 280 )
#####
# ————————————————————————— ЗАМОВНИК —————————————————————————
# Функция чтения файла в Listbox
def read_file_to_lbox():
	try:
		f = open('lbox.txt', 'r') # Открывает файл для чтения
	except:
		# Генерируем пункты для примера (вариант 2)
		list1=["Генеририруем","Тестовый","Если","не найден","файл","lbox.txt"] # Массив данных для вставки в Listbox
		for i in list1: # Цикл вставки в Listbox
			lbox1.insert(END,i)
		return # Вылет, если не удалось открыть файл
	
	list1 = f.read() # Читает файл
	f.close() # Закрыть дескриптор файла
	list1 = list1.split('\n') # делит строку указаным разделителем, возвращая список
	for i in list1: # Цикл вставки в Listbox
		lbox1.insert(END,i)
# ——————————————————————————————————————
# Функция связанная с кнопкой сохранения
def save_lbox_to_file():
	list1=lbox1.get(0, END) # Получить все пункты списка
	string = ''
	for i in list1: # Соединяем в строку
		string += i + '\n'
	string = string.rstrip('\n') # справа обрезает все символы, указанные в перечислении
	# sa = fdialog.asksaveasfilename(filetypes = [("Текстовые файлы", "*.txt")]) # вызов диалога сохранения
	try:
		f = open('lbox.txt', 'w') # Открывает файл для чтения
		# f = open(sa, 'w') # Открыть файл, режим добавления
	except:
		# print("Could not open File: ")
		# print(sys.exc_info()[1])
		return # Вылет, если не удалось открыть файл
	f.write(string) # пишем строку пунктов в файл
	f.close() # Закрываем файл после записи
	#root.quit()
# ——————————————————————————————————————
# Функция связанная с выбором в Listbox
def lbox_item_to_entry(evt):
	inx = lbox1.index(ANCHOR) # получаем индекс пункта
	if inx > lbox1.size() - 1: # Защита от применения действий к пункту без его выбора, список может быть пуст
		# print ('выберите пункт для начала')
		return
	value = lbox1.get(inx) # Получить выделенное
	edit1.delete(0, END) # очищает поле ввода
	edit1.insert(0,value) # вставляет текст в поле ввода
# ——————————————————————————————————————
# Функция вставки
def lbox_added_item():
	text = str(edit1.get()) # Читаем поле ввода
	if not (text==''): # Проверяем что текст не пустой, перед вставкой
		lbox1.insert(END,text) # Вставляет в конец списка
		edit1.delete(0, END) # очищает поле ввода
		# lbox1.insert(3,'- "' + text + '" - вставлен в поз:3') # Вставляет в позицию 3
	else:
		showwarning('Предупреждение', 'Укажите текст добавляемого пункта')
# ——————————————————————————————————————
# Функция редактирования
def lbox_edit_item():
	text = str(edit1.get()) # Читаем поле ввода
	if not (text==''): # Проверяем что текст не пустой, перед вставкой
		# print (text)
		# inx = lbox1.get(ACTIVE) # получаем текст пункта
		inx = lbox1.index(ANCHOR) # получаем индекс пункта
		if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
			showwarning('Предупреждение', 'Выберите пункт для редактирования')
			# print ('выберите пункт для начала')
			return
		lbox1.delete(inx) # удаляем пункт по индексу
		lbox1.insert(inx, text) # Вставляет пункт по индексу
		# lbox1.insert(inx, text + ' (удача ?)') # Для визуального теста
		edit1.delete(0, END) # очищает поле ввода
	else:
		showwarning('Предупреждение', 'Укажите новый текст пункта')
# ——————————————————————————————————————
# Функция удаления
def lbox_delete_item():
	inx = lbox1.index(ANCHOR) # получаем индекс пункта
	if inx > lbox1.size() - 1: # Защита от редактирования пункта без выбора
		showwarning('Предупреждение', 'Выберите пункт для удаления')
		return
	lbox1.delete(inx) # удаляет пункт по индексу
label_1 = Label(root, text = 'Замовник: ') # Создаём лейбл
label_1.place(x = 300, y = 10) # Задаём координаты лейбла
lbox1 = Listbox(root, width = 30) # Создаём список (, selectmode=MULTIPLE) (http://effbot.org/tkinterbook/listbox.htm)
lbox1.grid(padx=300, pady = 30) # Добавляем в слот grid с отступами
read_file_to_lbox()
edit1 = Entry(root, width = 30) # Создаём поле ввода
edit1.grid() # Добавляем в слот grid
# Связали (забиндили) событие выбора в Listbox с функцией "list_to_entry"
lbox1.bind('<<ListboxSelect>>', lbox_item_to_entry)
# Создаём кнопки и вязываем с функциями
button_1 = Button(root, text = '+', command = lbox_added_item)
button_1.pack()
button_1.place(x = 300, y = 195) # Если кнопку делаем в root, то координируем
button_2 = Button(root, text = '-', command = lbox_delete_item)
button_2.pack()
button_2.place(x = 50, y = 250) # Если кнопку делаем в root, то координируем
button_3 = Button(root, text = 'Правка', command = lbox_edit_item)
button_3.pack()
button_3.place(x = 390, y = 195) # Если кнопку делаем в root, то координируем
button_5 = Button(root, text = 'Сохранить', command = save_lbox_to_file)
button_5.pack()
button_5.place(x =320, y = 195) # Если кнопку делаем в root, то координируем
 
#------------------------------------------SAVE_AS_START------------------------------------------------------------------------
def save_as():
	      
        
	if askyesno("Save As?", "Зберегти введенне?"):
		
                       
#Объявление переменных
		
                zamownik = ' Замовник ' + str(edit1.get())
                zag_rob = ' Вид виконаних робiт ' + str(edit2.get()) 
                 
                      
                if (varVR.get() == 1):
                        wid_rabot = ' Загальний вид робiт: ' + rb1['text']
                elif (varVR.get() == 2):
                        wid_rabot = ' Загальний вид робiт: ' + rb2['text']
                elif (varVR.get() == 3):
                        wid_rabot = ' Загальний вид робiт: ' + rb3['text']
                elif (varVR.get() == 4):
                        wid_rabot = ' Загальний вид робiт: ' + rb4['text']
               ###############      
                print ('\n', zamownik, '\n',
                        zag_rob, '\n',
                        wid_rabot, '\n',			'-------------------------------------------------------------')
       
                list_1 = ['\n', zamownik, '\n',
                        zag_rob, '\n',
                        wid_rabot, '\n']
       
                sa = fdialog.asksaveasfilename(filetypes = [('all files', '.*'), ('xls files', '.xls'),('doc files', '.doc')]) # собственно, само сохранение
                f = open(sa, 'a')
                for i in list_1:                
                        f.write(i)
                f.close()
# Список фиг запишешь в фаил,
# пришлось циклично записывать по строкам   
#----------------------------------------------------SAVE_AS_END--------------------------------------------------------------------------------------------
frame_1 = Frame(root, bg = 'red', bd = 2)
button_0 = Button(frame_1, text = u'Зберегти', command = save_as)
button_0.pack()
frame_1.place(x = 400, y = 500 )
root.mainloop()
4kpt_II
Ну и что мне с этим делать?
Вы можете нормально поставить задачу и я Вам подробно расскажу как ее решить.

P.S. Бан, потому, как не зная сам вообще ничего он пытался учить. Когда учил использовал жуткий говнокод. На форуме устоялось, что говнокод может быть в вопросах, но не в ответах

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB