stable-diffusion-webui

Форк
0
/
ui_components.py 
144 строки · 4.0 Кб
1
import gradio as gr
2

3

4
class FormComponent:
5
    def get_expected_parent(self):
6
        return gr.components.Form
7

8

9
gr.Dropdown.get_expected_parent = FormComponent.get_expected_parent
10

11

12
class ToolButton(FormComponent, gr.Button):
13
    """Small button with single emoji as text, fits inside gradio forms"""
14

15
    def __init__(self, *args, **kwargs):
16
        classes = kwargs.pop("elem_classes", [])
17
        super().__init__(*args, elem_classes=["tool", *classes], **kwargs)
18

19
    def get_block_name(self):
20
        return "button"
21

22

23
class ResizeHandleRow(gr.Row):
24
    """Same as gr.Row but fits inside gradio forms"""
25

26
    def __init__(self, **kwargs):
27
        super().__init__(**kwargs)
28

29
        self.elem_classes.append("resize-handle-row")
30

31
    def get_block_name(self):
32
        return "row"
33

34

35
class FormRow(FormComponent, gr.Row):
36
    """Same as gr.Row but fits inside gradio forms"""
37

38
    def get_block_name(self):
39
        return "row"
40

41

42
class FormColumn(FormComponent, gr.Column):
43
    """Same as gr.Column but fits inside gradio forms"""
44

45
    def get_block_name(self):
46
        return "column"
47

48

49
class FormGroup(FormComponent, gr.Group):
50
    """Same as gr.Group but fits inside gradio forms"""
51

52
    def get_block_name(self):
53
        return "group"
54

55

56
class FormHTML(FormComponent, gr.HTML):
57
    """Same as gr.HTML but fits inside gradio forms"""
58

59
    def get_block_name(self):
60
        return "html"
61

62

63
class FormColorPicker(FormComponent, gr.ColorPicker):
64
    """Same as gr.ColorPicker but fits inside gradio forms"""
65

66
    def get_block_name(self):
67
        return "colorpicker"
68

69

70
class DropdownMulti(FormComponent, gr.Dropdown):
71
    """Same as gr.Dropdown but always multiselect"""
72
    def __init__(self, **kwargs):
73
        super().__init__(multiselect=True, **kwargs)
74

75
    def get_block_name(self):
76
        return "dropdown"
77

78

79
class DropdownEditable(FormComponent, gr.Dropdown):
80
    """Same as gr.Dropdown but allows editing value"""
81
    def __init__(self, **kwargs):
82
        super().__init__(allow_custom_value=True, **kwargs)
83

84
    def get_block_name(self):
85
        return "dropdown"
86

87

88
class InputAccordion(gr.Checkbox):
89
    """A gr.Accordion that can be used as an input - returns True if open, False if closed.
90

91
    Actaully just a hidden checkbox, but creates an accordion that follows and is followed by the state of the checkbox.
92
    """
93

94
    global_index = 0
95

96
    def __init__(self, value, **kwargs):
97
        self.accordion_id = kwargs.get('elem_id')
98
        if self.accordion_id is None:
99
            self.accordion_id = f"input-accordion-{InputAccordion.global_index}"
100
            InputAccordion.global_index += 1
101

102
        kwargs_checkbox = {
103
            **kwargs,
104
            "elem_id": f"{self.accordion_id}-checkbox",
105
            "visible": False,
106
        }
107
        super().__init__(value, **kwargs_checkbox)
108

109
        self.change(fn=None, _js='function(checked){ inputAccordionChecked("' + self.accordion_id + '", checked); }', inputs=[self])
110

111
        kwargs_accordion = {
112
            **kwargs,
113
            "elem_id": self.accordion_id,
114
            "label": kwargs.get('label', 'Accordion'),
115
            "elem_classes": ['input-accordion'],
116
            "open": value,
117
        }
118
        self.accordion = gr.Accordion(**kwargs_accordion)
119

120
    def extra(self):
121
        """Allows you to put something into the label of the accordion.
122

123
        Use it like this:
124

125
        ```
126
        with InputAccordion(False, label="Accordion") as acc:
127
            with acc.extra():
128
                FormHTML(value="hello", min_width=0)
129

130
            ...
131
        ```
132
        """
133

134
        return gr.Column(elem_id=self.accordion_id + '-extra', elem_classes='input-accordion-extra', min_width=0)
135

136
    def __enter__(self):
137
        self.accordion.__enter__()
138
        return self
139

140
    def __exit__(self, exc_type, exc_val, exc_tb):
141
        self.accordion.__exit__(exc_type, exc_val, exc_tb)
142

143
    def get_block_name(self):
144
        return "checkbox"
145

146

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.