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

GUI

09.07.2018, 13:28. Показов 2393. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пишу приложение для приема и отправки email. Решил сделать к нему GUI. В качестве фреймворка выбрал Kivy. Во время проектирования накопилось несколько вопросов:

1. Делаю форму логина. Использую AnchorLayout в качестве корневого виджета. Но он может вместить в себя только один виджет. И его я могу настроить. А как быть с оставшейся частью окна? А то получается, что весь бэкграунд черный. Как изменить цвет бэкграунда у лэйаута?

2. В теории должно быть 2 окна: окно логина и основное окно. До этого я юзал только Delphi и там это делается просто. Создаются 2 окна, связываются друг с другом и все. Пробовал аналогично здесь - не вышло. Нашел в документации модуль ScreenManager, сделал как там написано, работает. Однако появились вопросы: как прописать функцию обработчик к кнопке?
можно ли настроить файл конфига отдельно для каждого окна?

3. В окне логина сделал CheckBox на случай, если пользователь захочет сохранить введенные логин/пароль. Как мне к нему приделать к нему текст с подсказкой(напр. "Запомнить меня")? Добавлением по соседству лейбла? Просто в документации я не нашел ничего подобного.

Код:
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
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.uix.checkbox import CheckBox
 
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
 
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
 
from kivy.config import Config
 
Config.set('graphics', 'resizable', '0');
Config.set('graphics', 'width', '640');
Config.set('graphics', 'height', '480');
 
 
Builder.load_string("""
<LoginScreen>:
    AnchorLayout:
        BoxLayout:
            orientation: 'vertical'
            size_hint: [0.5, 0.5]
            GridLayout:
                rows: 2
                cols: 2
                padding: [0, 20, 0, 0]
                spacing: [25]
                Label:
                    text: 'Email'
                    size_hint_x: None
                    width: 100
                    font_size: 16
                TextInput:
                    text: ''
                    font_size: 20
                    multiline: False
                    padding: [6, 6, 0, 6]
                Label:
                    text: 'Password'
                    size_hint_x: None
                    width: 100
                    font_size: 16
                TextInput:
                    text: ''
                    font_size: 20
                    multiline: False
                    padding: [6, 6, 0, 6]
            GridLayout:
                cols: 3
                padding: [0, 20, 0, 70]
                CheckBox:
                Widget:
                Button:
                    text: 'Log in'
                    background_color: [.97, .55, .12, 1]
                    background_normal: ''
                    on_press:
                        ConfigChange
                        root.manager.transition.direction = 'left'
                        root.manager.current = 'Main'
 
                    
<MainScreen>:
    BoxLayout:
        Button:
            text: 'My settings button'
        Button:
            text: 'Back to menu'
            on_press:
                root.manager.transition.direction = 'right'
                root.manager.current = 'Login'
""")
 
 
class LoginScreen(Screen):
    pass
    # def ConfigChange(self, instance):
 #      Config.set('graphics', 'resizable', '0')
 #      Config.set('graphics', 'width', '720')
 #      Config.set('graphics', 'height', '640')
 
class MainScreen(Screen):
    pass
 
 
sm = ScreenManager(transition=NoTransition())
sm.add_widget(LoginScreen(name='Login'))
sm.add_widget(MainScreen(name='Main'))
 
class TestApp(App):
 
    def build(self):
        self.title = "Email"
        return sm
 
if __name__ == '__main__':
    TestApp().run()

Само окно:
Миниатюры
GUI  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.07.2018, 13:28
Ответы с готовыми решениями:

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

Pyqt GUI
Прошу помощи в подборе темы для диплома. Необходимо написать программу с GUI, решил писать на python, так как он мне нравится, есть...

GUI Python
Дорогие товарищи форумчане! Прошу вашей помощи, в выполнении задания! Рассмотрим работу с фреймворком Qt по созданию виджетов и...

2
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
09.07.2018, 14:51
Цитата Сообщение от G59 Посмотреть сообщение
А то получается, что весь бэкграунд черный. Как изменить цвет бэкграунда у лэйаута?
У лэйаутов нет цвета, это цвет окна, изменить можно так

Python
1
2
3
4
5
6
7
8
<LoginScreen>:
    AnchorLayout:
        canvas.before:
            Color:
                rgba: 1, 1, 1, 1
            Rectangle:
                pos: self.pos
                size: self.size
Цитата Сообщение от G59 Посмотреть сообщение
Однако появились вопросы: как прописать функцию обработчик к кнопке?
можно ли настроить файл конфига отдельно для каждого окна?
Обработчик кнопки привязывается так
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
Button:
                    text: 'Log in'
                    background_color: [.97, .55, .12, 1]
                    background_normal: ''
                    on_press:
                        root.ConfigChange(self)
                        root.manager.transition.direction = 'left'
                        root.manager.current = 'Main'
 
.......
 
 
class LoginScreen(Screen):
    def __init__(self,**kwargs):
        super(LoginScreen, self).__init__(**kwargs)
        Window.size = (640, 480) 
 
    def ConfigChange(self, *val):
        Window.size = (800, 600) 
 
    # def ConfigChange(self, instance):
 #      Config.set('graphics', 'resizable', '0')
 #      Config.set('graphics', 'width', '720')
 #      Config.set('graphics', 'height', '640')
 
class MainScreen(Screen):
    def __init__(self,**kwargs):
        super(MainScreen, self).__init__(**kwargs)
 
    def ConfigChange(self, *val):
        Window.size = (640, 480)
Тут, заодно, как динамически менять размеры окна

Цитата Сообщение от G59 Посмотреть сообщение
Как мне к нему приделать к нему текст с подсказкой(напр. "Запомнить меня")? Добавлением по соседству лейбла?
Да, просто label сбоку. Так обычно и делается.
1
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 50
09.07.2018, 16:05  [ТС]
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.07.2018, 16:05
Помогаю со студенческими работами здесь

GUI в браузере
Какими средствами и возможно ли сделать интерфейс программы в браузере, т.е. вместо того, что использовать pyqt, использовать другие...

Gui Python
Здравствуйте друзья. Прошу помочь разобраться с ошибкой. Изучаю Gui пишу приложение (комбинированный список с тремя элементами, когда...

GUI к нейросети
Здравствуйте, нужен простой графический интерфейс для нейросети. Подскажите какими средствами можно реализовать вот мой код к...

Ошибка в gui
Не могу запустить программу, в чём дело? никаие не работают

Gui-html
здравствуйте, как не крути гуи лучшего чем в html нет)), или есть? если судить по возможностям и по сообществу пользующемуся этим гуи ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru