Bad geometry specifier питон

Bad geometry specifier питон

Спасибо.
Я импортировал SafeConfigParser, в разнице разобрался смутно.
И пытался изобразить подобие проверки файла на наличие и содержание.
Так же поясните насчет .open, оно если не найдет файл, то перезапишет, так? А если только чтение, то .read?
У меня python 3.3 все в нижнем регистре, только названия модулей в верхнем.
Сейчас приду с работы попробую использование .get и выложу результат.

Вот решил все с самого начала, по порядку:

# Порядок действий
Проверить наличие файла и содержимое
Если все хорошо read()
Иначе rewrite()
Чтение файла и конфигурирование окна

# Импорт from tkinter import * from configparser import * import os mainframe = Tk() mainframe.title("Name") parser = ConfigParser() # Проверить наличие файла и содержимое if os.path.exists('default.cfg'): if 800  int(parser.get('set_file','s_width'))  1980: if 500  int(parser.get('set_file','s_height'))  1920: if int(parser.get('set_file','s_full')) in [0, 1]: pass else: # Перезапись в этом же условии open('default.cfg','w', encoding="utf-8") parser.add_section('set_file') parser.set(section='set_file', option='s_height', value='500') parser.set(section='set_file', option='s_width', value='800') # parser.read('default.cfg') mainframe_x = parser.get('set_file','s_width') mainframe_y = parser.get('set_file','s_height') mainframe_screen = parser.get('set_file','s_full') if int(mainframe_screen) == 1: mainframe.state('zoomed') else: pass mainframe_width = (mainframe.winfo_screenwidth() / 2 - int(mainframe_x) / 2) mainframe_heigth = (mainframe.winfo_screenheight() / 2 - int(mainframe_y) / 2) mainframe.geometry("%dx%d+%d+%d" % (int(mainframe_x), int(mainframe_y), mainframe_width, mainframe_heigth)) mainframe.mainloop() 

Удалил конфиг файл и запустил отладку. Создало пустой файл и выкинуло ошибку, что нет section ‘set_file’. Тоесть не удалось записать.

Заменил эту часть, результат тот же:

parser.add_section('set_file') parser.set(section='set_file', option='s_height', value='500') parser.set(section='set_file', option='s_width', value='800') parser.set(section='set_file', option='s_full', value='0') with open('default.cfg','w', encoding="utf-8") as file_cf: parser.write(file_cf) file_cf.close() 

param может быть
“r” — только чтение текстовых данных;
“rb” — чтение в двоичном формате (необходимо, в часности, для модуля pickle);
“w” — открытие для записи только тесктовых данных;
“wb” — запись в двоичном формате (тот же pickle);
“r+”, “w+” — чтение и запись, но запись осуществляется с начала файла;
“a” — запись текстовых данных (запись в конец файла);
“a+” — чтение и запись текстовых данных (запись в конец файла);

Понятно, что можно комбинировать:
“rb+” — чтение и запись данных в двоичном формате.

Вот окончательный вариант.
Создает правильный файл и стартует окно.
Но при повторном запуске пишет что секции set_file нет.

# Импорт from tkinter import * from configparser import * import os mainframe = Tk() mainframe.title("Name") parser = ConfigParser() # Проверить наличие файла и содержимое if os.path.exists('default.cfg'): if 800  int(parser.get('set_file','s_width'))  1980: if 500  int(parser.get('set_file','s_height'))  1920: if int(parser.get('set_file','s_full')) in [0, 1]: pass else: # Перезапись в этом же условии parser.add_section('set_file') parser.set(section='set_file', option='s_height', value='500') parser.set(section='set_file', option='s_width', value='800') parser.set(section='set_file', option='s_full', value='0') with open('default.cfg','w', encoding="utf-8") as file_cf: parser.write(file_cf) file_cf.close() # parser.read('default.cfg') mainframe_x = parser.get(section='set_file', option='s_width') mainframe_y = parser.get(section='set_file', option='s_height') mainframe_screen = parser.get(section='set_file', option='s_full') if int(mainframe_screen) == 1: mainframe.state('zoomed') else: pass mainframe_width = (mainframe.winfo_screenwidth() / 2 - int(mainframe_x) / 2) mainframe_heigth = (mainframe.winfo_screenheight() / 2 - int(mainframe_y) / 2) mainframe.geometry("%dx%d+%d+%d" % (int(mainframe_x), int(mainframe_y), mainframe_width, mainframe_heigth)) mainframe.mainloop() 

Немножко допилил. Теперь, если при закрытии корневого окна его размер изменился, новый размер будет сохранен в файл конфигурации. Комментарии написал, если что — спрашивайте…

import Tkinter import ConfigParser import os root = Tkinter.Tk() root.title("Name") # Сохраниеи конфигурации при отсутствии файла, неверных данных в файле или # при закрытии окна. def save_config(event=False): values = [str(width), str(height), full_s] if event: # Проверка изменений параметров окна. if (root.winfo_width() != width or root.winfo_height() != height or root.state() != full_s): values = [str(root.winfo_width()), str(root.winfo_height()), root.state()] root.destroy() parser = ConfigParser.ConfigParser() parser.add_section('set_file') for option, value in zip(['s_width', 's_height', 's_full'], values): parser.set('set_file', option, value) with open('default.ini','w') as file_cf: parser.write(file_cf) # Проверка файла конфигурации if os.path.exists('default.ini'): parser = ConfigParser.ConfigParser() parser.read('default.ini') width = parser.getint('set_file','s_width') height = parser.getint('set_file','s_height') full_s = parser.get('set_file','s_full') if not (800  width  1980 and 500  height  1920 and full_s in ['zomed', 'normal']): width, height, full_s = (800, 500, 'normal') save_config() else: width, height, full_s = (800, 500, 'normal') save_config() # Построение окна geom = "%sx%s+%s+%s" %(width, height, root.winfo_screenwidth() / 2 - width / 2, root.winfo_screenheight() / 2 - height / 2) root.state(full_s) root.geometry(geom) root.protocol("WM_DELETE_WINDOW", lambda: save_config(True)) root.mainloop() 

Прошу Вас не использовать инструкцию from .. import* .

P.S. В моей инструкции к ConfigParser была ошибка. Исправил 🙂 Метод .read() принимает имя файла конфигурации а не файловый дискриптор.

Ошибка bad geometry specifier “800×500+240.0+262.0”
Заменил:

geom = "%sx%s+%s+%s" %(width, height, root.winfo_screenwidth() / 2 - width / 2, root.winfo_screenheight() / 2 - height / 2) 
geom = "%sx%s+%s+%s" %(width, height, int(root.winfo_screenwidth() / 2 - width / 2), int(root.winfo_screenheight() / 2 - height / 2)) 
root.protocol("WM_DELETE_WINDOW", lambda: save_config(True)) 

Источник

Tkinter error tkinter TclError bad geometry specifier

  • All categories
  • ChatGPT (11)
  • Apache Kafka (84)
  • Apache Spark (596)
  • Azure (145)
  • Big Data Hadoop (1,907)
  • Blockchain (1,673)
  • C# (141)
  • C++ (271)
  • Career Counselling (1,060)
  • Cloud Computing (3,469)
  • Cyber Security & Ethical Hacking (162)
  • Data Analytics (1,266)
  • Database (855)
  • Data Science (76)
  • DevOps & Agile (3,608)
  • Digital Marketing (111)
  • Events & Trending Topics (28)
  • IoT (Internet of Things) (387)
  • Java (1,247)
  • Kotlin (8)
  • Linux Administration (389)
  • Machine Learning (337)
  • MicroStrategy (6)
  • PMP (423)
  • Power BI (516)
  • Python (3,193)
  • RPA (650)
  • SalesForce (92)
  • Selenium (1,569)
  • Software Testing (56)
  • Tableau (608)
  • Talend (73)
  • TypeSript (124)
  • Web Development (3,002)
  • Ask us Anything! (66)
  • Others (2,231)
  • Mobile Development (395)
  • UI UX Design (24)

Join the world’s most active Tech Community!

Welcome back to the World’s most active Tech Community!

Subscribe to our Newsletter, and get personalized recommendations.

GoogleSign up with Google facebookSignup with Facebook

Thank you for registering Join Edureka Meetup community for 100+ Free Webinars each month JOIN MEETUP GROUP

  • DevOps Certification Training
  • AWS Architect Certification Training
  • Big Data Hadoop Certification Training
  • Tableau Training & Certification
  • Python Certification Training for Data Science
  • Selenium Certification Training
  • PMP® Certification Exam Training
  • Robotic Process Automation Training using UiPath
  • Apache Spark and Scala Certification Training
  • Microsoft Power BI Training
  • Online Java Course and Training
  • Python Certification Course
  • Data Scientist Masters Program
  • DevOps Engineer Masters Program
  • Cloud Architect Masters Program
  • Big Data Architect Masters Program
  • Machine Learning Engineer Masters Program
  • Full Stack Web Developer Masters Program
  • Business Intelligence Masters Program
  • Data Analyst Masters Program
  • Test Automation Engineer Masters Program
  • Post-Graduate Program in Artificial Intelligence & Machine Learning
  • Post-Graduate Program in Big Data Engineering

COMPANY

WORK WITH US

DOWNLOAD APP

appleplaystore googleplaystore

CATEGORIES

CATEGORIES

  • Cloud Computing
  • DevOps
  • Big Data
  • Data Science
  • BI and Visualization
  • Programming & Frameworks
  • Software Testing © 2023 Brain4ce Education Solutions Pvt. Ltd. All rights Reserved. Terms & ConditionsLegal & Privacy

Источник

Почему не работает функция захвата дочернего окна и запрет на иземенение размера?

Есть приложение, планировщик финансов в котором создаю дочернее окно для добавления расходов и доходов. На данном этапе работает и приложение и само окно, но по идее закрывать основное окно или хоть как-то взаимодействовать с ним нельзя, пока открыто дочернее окно. Как и менять размеры окна.(но вышеописанное не работает от слова совсем)
вот кусок кода

def init_child(self): self.title('Добавить доходы/расходы') self.geometry('400x220+400x300') self.resizable(False, False) self.grab_set() self.focus_set()

да при открытии запуске кода нет ошибок, а при открытии в приложении дочернего окна вылезает вот это:

Exception in Tkinter callback
Traceback (most recent call last):
File «C:\Users\1\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py», line 1705, in __call__
return self.func(*args)
File «C:/Users/1/PycharmProjects/Household finance/main», line 20, in open_dialog
Child()
File «C:/Users/1/PycharmProjects/Household finance/main», line 25, in __init__
self.init_child()
File «C:/Users/1/PycharmProjects/Household finance/main», line 29, in init_child
self.wm_geometry(‘400×220+400×300’)
File «C:\Users\1\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py», line 1841, in wm_geometry
return self.tk.call(‘wm’, ‘geometry’, self._w, newGeometry)
_tkinter.TclError: bad geometry specifier «400×220+400×300»
Все нашел решение, в строке «400×220+400×300, нужно было поменять x на + «400×220+400+300

Войдите, чтобы написать ответ

Выдает ошибку Traceback (most recent call last) что делать?

Источник

Читайте также:  Python matplotlib subplot title
Оцените статью