Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 17.09.2020
Сообщений: 5
PyQt5

Не работает функция для сохранения и восстановления значений виджета пользовательского интерфейса

17.09.2020, 14:27. Показов 1379. Ответов 7

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtCore import QSettings
from GeoAssistant_v1_0 import Ui_glavnaya0
import sys, os, configparser, inspect
 
class glavnaya0(QtWidgets.QMainWindow):
    def __init__(self):
        super(glavnaya0,self).__init__()
        self.ui=Ui_glavnaya0()
        self.ui.setupUi(self)  
        #self.ui.rdb_show_max.setChecked(True)
        self.settings=QSettings('GeoAssistant', 'ShAMS Group', self)
        self.ui.loadSetting()
 
    def closeEvent(self, e):
        self.saveSetting()
        e.accept()                
  
    def saveSetting(self):
        self.settings.setValue('size', self.size())
        self.settings.setValue('pos', self.pos())
 
        for name, obj in inspect.getmembers(self.ui):
          if isinstance(obj, QComboBox):
              name = obj.objectName() 
              index = obj.currentIndex()  
              text = obj.itemText(index) 
              settings.setValue(name, text)  
 
          if isinstance(obj, QLineEdit):
              name = obj.objectName()
              value = obj.text()
              settings.setValue(name, value) 
 
          if isinstance(obj, QCheckBox):
              name = obj.objectName()
              state = obj.isChecked()
              settings.setValue(name, state)
 
          if isinstance(obj, QRadioButton):
              name = obj.objectName()
              value = obj.isChecked()
              settings.setValue(name, value)
              
          if isinstance(obj, QSpinBox):
              name  = obj.objectName()
              value = obj.value()            
              settings.setValue(name, value)
 
          if isinstance(obj, QSlider):
              name  = obj.objectName()
              value = obj.value()            
              settings.setValue(name, value)
 
 
    def loadSetting(self):
          self.resize(self.settings.value('size',  QtCore.QSize(500, 500)))
          self.move(self.settings.value('pos', QtCore.QPoint(60, 60)))
 
          for name, obj in inspect.getmembers(self.ui):
              if isinstance(obj, QComboBox):
                  index = obj.currentIndex()  
                  name = obj.objectName()
                  value = (settings.value(name))
 
                  if value == "":
                      continue
 
                  index = obj.findText(value)
 
                  if index == -1: 
                        obj.insertItems(0, [value])
                        index = obj.findText(value)
                        obj.setCurrentIndex(index)
                  else:
                        obj.setCurrentIndex(index)
                        
 
              if isinstance(obj, QLineEdit):
                  name = obj.objectName()
                  value = (settings.value(name).decode('utf-8'))  
                  obj.setText(value) 
 
              if isinstance(obj, QCheckBox):
                  name = obj.objectName()
                  value = settings.value(name)  
                  if value != None:
                      obj.setChecked(strtobool(value)) 
 
              if isinstance(obj, QRadioButton):
                 name = obj.objectName()
                 value = settings.value(name)  
                 if value != None:
                     obj.setChecked(strtobool(value))
 
              if isinstance(obj, QSlider):
                  name = obj.objectName()
                  value = settings.value(name)   
                  if value != None:           
                      obj. setValue(int(value))   
 
              if isinstance(obj, QSpinBox):
                  name = obj.objectName()
                  value = settings.value(name)    
                  if value != None:
                      obj. setValue(int(value))
 
                 
 
app=QtWidgets.QApplication([])
application=glavnaya0()
application.show()
 
sys.exit(app.exec())
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.09.2020, 14:27
Ответы с готовыми решениями:

Ошибка: функция сохранения и восстановления
Доброго времени суток, форумчане! Есть приложение BeatBox, написанное по книге Сьерра и Бейтс "Изучаем Java". В самом...

Проектировка пользовательского интерфейса для БД
здравствуйте! Есть три таблицы: "оборудование", "операции", "задания". Одна и та же операция может быть сделана на разном...

Разработка пользовательского интерфейса для программы на C++
Доброго времени суток, уважаемые участники форума! Я начинающий программист изучавший до недавнего времени язык "pascal", сейчас...

7
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
17.09.2020, 14:39
Интересно, что же там произошло?
0
0 / 0 / 0
Регистрация: 17.09.2020
Сообщений: 5
17.09.2020, 14:51  [ТС]
после запуска появляется вот такое сообщение
Python
1
2
3
4
5
6
7
== RESTART: C:\Users\User\AppData\Local\Programs\Python\Python38-32\geomain.py =
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\geomain.py", line 185, in <module>
    application=glavnaya0()
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\geomain.py", line 15, in __init__
    self.ui.loadSetting()
AttributeError: 'Ui_glavnaya0' object has no attribute 'loadSetting'
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
17.09.2020, 14:54
Лучший ответ Сообщение было отмечено ShAMS как решение

Решение

ShAMS, ну естественно, потому что у тебя метод loadSetting находится не в ui, а в glavnaya0

Добавлено через 38 секунд
То бишь исправь self.ui.loadSetting() на self.loadSetting()
1
0 / 0 / 0
Регистрация: 17.09.2020
Сообщений: 5
17.09.2020, 15:00  [ТС]
Теперь вот такая ошибка появилась
Python
1
2
self.resize(self.settings.value('size',  QtCore.QSize(500, 500)))
NameError: name 'QtCore' is not defined
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
17.09.2020, 15:09
ShAMS, ну естественно x2, ты же его не импортировал.

Добавлено через 47 секунд
То бишь х2 исправь from PyQt5 import QtWidgets, QtGui на from PyQt5 import QtWidgets, QtCore, QtGui
1
0 / 0 / 0
Регистрация: 17.09.2020
Сообщений: 5
17.09.2020, 15:15  [ТС]
спасибо вам за ответи. я очень благодарен

есть еще вопрос. я совсем новичок в сфере питон

вот такая ошибка
Python
1
2
    if isinstance(obj, QComboBox):
NameError: name 'QComboBox' is not defined
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
17.09.2020, 15:19
ShAMS, QtWidgets.QComboBox

У тебя там миллион ошибок.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.09.2020, 15:19
Помогаю со студенческими работами здесь

Создание пользовательского интерфейса для работы с firebird
Добрый день. Ребят подскажите, с помощью какой технологии проще будет создать пользовательский интерфейс для работы с БД, и вообще...

Как добавить сторонний шрифт для пользовательского интерфейса?
Мне надо было добавить сторонний шрифт в программу; в основной форме все прекрасно работало, но в пользовательских интерфейсах возникают...

Средство для визуальной разработки пользовательского интерфейса в Eclipse
Может кто-нибудь знает есть ли (а если есть, то где) в этой IDE средство для визуальной разработки пользовательского интерфейса? (ну...

Создание библиотеки компонентов для которых не существует пользовательского интерфейса
Добрый день. Подскажите как создать библиотеку компонентов для которых не существует пользовательского интерфейса например таких как Timer...

Написание программы для подбора цветовой гаммы пользовательского интерфейса
Написать программу, предназначенную для подбора цветовой гаммы пользовательского интерфейса. Программа должна выводить на экран макет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru