method() missing 1 required positional argument

method() missing 1 required positional argument
G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Witam,

Czy ktoś mógłby mnie naprowadzić na rozwiązanie tego problemu?

Kopiuj

class DetailsScreen(Screen):
    detailslabel = StringProperty()

    def change_text(self, detailslabel):
        if not os.path.isfile("details.pickle"):
            return detailslabel == 'Choose your details'
        else:
            return detailslabel == 'We have your details.'

    change_text(detailslabel)

TypeError: change_text() missing 1 required positional argument: 'detailslabel'

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 14 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10056
2

self jest pierwszym, detailslabel jest drugim argumentem.

hit02
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 4 lata
  • Lokalizacja:Kernel
  • Postów:90
1

Powinno być

Kopiuj
self.change_text(detailslabel)

loop:
push 0FFFFFFFFh
call Sleep
jmp loop
edytowany 1x, ostatnio: hit02
G8
Dzięki. jutro sprawdzę czy działa
G8
Niestety. NameError: name 'self' is not defined
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
2

Żeby Ci zadziałała metoda Musisz mieć utworzony obiekt:

Kopiuj
class Foo():
    val = "a"
    def change(self, val):
        return "Function changes is working"


bar = Foo()
print(bar.change(bar.val))

G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Ta klasa jest utworzona do screen managera, kiedy w kv wpisuje na przykład on_press: root.change_details wszystko działa. Chciałbym, żeby zawartość labela zmieniała się bez naciskania na buttony, żeby za każdym razem po odpaleniu screena, funkcja się wykonywała. Kod, który wysłałeś nie działa w tym przypadku. Obiekt musiałbym stworzyć ale wywołać go wewnątrz klasy.

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

To Musisz zmienić design, przecież nie można stworzyć obiektu klasy wewnatrz tej klasy, po prostu w przestrzeni nazw w środku klasy nie ma nazwy klasy.


G8
Czy mógłbyś rozwinąć co masz na myśli pisząc "zmienić design"? Da się uruchomić funkcję po włączeniu screena bez żadnych dodatkowych kliknięć?
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

Zrób tak, żeby klasa była zdefiniowana tak, żebyś w ja miał w przestrzeni nazw w miejscu gdzie Chcesz wykonać ten kod, czyli w tym samym module, albo w imporcie.


G8
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

Yhm, zaimportowaną do modułu


MA
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:337
0

Przy definicji klasy wszystko co jest po dwukropku

class MojaKlasa(...):
#....

Zostanie zdefiniowane i wywołane.
Dlatego change_text nie działa, bo jako instancję obiektu podajesz parametr detailslabel, a jako drugi parametr nic nie podajesz, a w funkcja wymaga dwóch pozycyjnych argumentów przez co masz błąd.

Na poziomie deklaracji klasy i jej interpretacji self jako instancja obiektu jeszcze nie istnieje.

G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Próbuje teraz zrobić to w ten sposób(fragment kodu), żeby label aktualizował się na bieżąco:

Kopiuj

Builder.load_string('''

    DetailsLabel:
        id: detailslabel
        background_color:1, 0, 1, 1
        pos_hint: {'x': .4, 'y': .93}
        size_hint: .5, .3
        text_size: self.size

''')

class DetailsLabel(Label):


    def __init__(self, text):
        self.text = text

    def update_text(self):
        if not os.path.isfile("details.pickle"):
            return self.text == 'Wprowadz dane'
        else:
            return self.text == 'Mamy dane'


class MyApp(App):


    def build(self):
        labelclock = DetailsLabel()
        Clock.schedule_interval(labelclock.update_text, 1)
        return sm



if __name__ == '__main__':
    MyApp().run()

TypeError: init() got an unexpected keyword argument '__no_builder'

Co tym razem jest nie tak z tą klasą?

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

Konstruktor oczekuje argumentu, Daj: labelclock = DetailsLabel("string").


G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Problem rozwiązany, pojawił się następny:
TypeError: init() missing 1 required positional argument: 'text'

:D ale w końcu się uda

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

Jaki dałeś argument do konstruktora, jest jakieś stack trace? Poka kod.


G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Cały kod? Trochę tego jest

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

Tak, jak ostatnio, tą klasę Detailslabel i jak ją Uruchamiasz.


G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Skróciłem do konkretów, skasowałem funkcje do saveowania inputu ze spinnerów.

Kopiuj

import os
os.environ['KIVY_GL_BACKEND'] = 'angle_sdl2'


from kivy.app import App
import pickle
import os.path
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.image import Image
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.config import Config
from kivy.factory import Factory
from kivy.properties import ListProperty, ObjectProperty, BooleanProperty, StringProperty
from kivy.uix.dropdown import DropDown
from kivy.uix.spinner import Spinner
from kivy.clock import Clock
from kivy.base import runTouchApp
from kivy.uix.textinput import TextInput
from functools import partial





#Window configuration

Config.set('graphics', 'width', '400')
Config.set('graphics', 'height', '800')
Config.write()

#Kivy

Builder.load_string('''

<MainScreen>:
    MainLayout:
        canvas.before:
            BorderImage:
                border: 10, 10, 10, 10
                texture: self.background_image.texture
                pos: self.pos
                size: self.size
        size_hint: .99, .99
        pos_hint: {'center_x': .5, 'center_y': .5}
        
    Button: #  Details
        background_color:0, 0, 0, 0
        pos_hint: {'x': .03, 'y': .46}
        size_hint: .40, .20
        on_press:
            root.manager.current = 'Details'
            root.manager.transition.direction = "right"
            
            

    Button: #  Menu
        background_color:0, 0, 0, 0
        pos_hint: {'x': .55, 'y': .24}
        size_hint: .40, .20
        on_press:
            root.manager.current = 'Menu'
            root.manager.transition.direction = "left"

    Button: #  Max_weights
        background_color:0, 0, 0, 0
        pos_hint: {'x': .55, 'y': .46}
        size_hint: .40, .20
        on_press:
            root.manager.current = 'Max_weight'
            root.manager.transition.direction = "left"

            
    Button: #  About
        background_color:0, 0, 0, 0
        pos_hint: {'x': .55, 'y': .01}
        size_hint: .40, .20
        on_press:
            root.manager.current = 'About'
            root.manager.transition.direction = "left"
   
    Button: #  Sessions
        background_color:0, 0, 0, 0
        pos_hint: {'x': .03, 'y': .24}
        size_hint: .40, .20
        on_press:
            root.manager.current = 'Sessions'
            root.manager.transition.direction = "right"        

    Button: #  Timetable
        background_color:0, 0, 0, 0
        pos_hint: {'x': .03, 'y': .01}
        size_hint: .40, .20
        on_press:
            root.manager.current = 'Timetable'
            root.manager.transition.direction = "right"


<AboutScreen>
    AboutLayout:
        canvas.before:
            BorderImage:
                border: 10, 10, 10, 10
                texture: self.background_image.texture
                pos: self.pos
                size: self.size
        size_hint: .99, .99
        pos_hint: {'center_x': .5, 'center_y': .5}
    Button:
        pos_hint: {'x': .01, 'y': .90}
        size_hint: .50, .10
        background_color:0, 0, 0, 0
        on_press: 
            root.manager.current = "Main"
            root.manager.transition.direction = 'right'
   
    Button:
        text: 'Some very long line which will be cut'
        text_size: self.size
        pos_hint: {'x': .21, 'y': .20}
        size_hint: .50, .30
        

<DetailsScreen>:
    DetailsLayout:
        canvas.before:
            BorderImage:
                border: 10, 10, 10, 10
                texture: self.background_image.texture
                pos: self.pos
                size: self.size
        size_hint: .99, .99
        pos_hint: {'center_x': .5, 'center_y': .5}
    Button:
        pos_hint: {'x': .01, 'y': .90}
        size_hint: .50, .10
        background_color:0, 0, 0, 0
        on_press: 
            root.manager.current = "Main"
            root.manager.transition.direction = 'left'
    Spinner:
        id: spinner_sex
        pos_hint: {'x': .35, 'y': .65}
        size_hint: .30, .05
        background_color:0, 0, 0, 0
        text: '< Select >'
        values: ('Male', 'Female')
        on_text: root.save_input_spinner(spinner_sex.id, spinner_sex.text)
     
        
    Spinner:
        id: spinner_goal
        pos_hint: {'x': .35, 'y': .04}
        size_hint: .30, .05
        background_color:0, 0, 0, 0
        text: '< Select >'
        values: ('Strenght', 'Mass', 'Sculpture')
        on_text: root.save_input_spinner(spinner_goal.id, spinner_goal.text)
       
        
    Spinner:
        id: spinner_activity
        pos_hint: {'x': .35, 'y': .23}
        size_hint: .30, .05
        background_color:0, 0, 0, 0
        text: '< Select >'
        values: ('Bardzo', 'Aktywny', 'średni', 'nisko')
        on_text: root.save_input_spinner(spinner_activity.id, spinner_activity.text)
        
    
    SpinnerKg:
        id: spinner_kg
        pos_hint: {'x': .45, 'y': .45}
        size_hint: .1, .05
        text: '<Select>'
        background_color:0, 0, 0, 0
        on_text: root.save_input_spinner(spinner_kg.id, spinner_kg.text)
       
    
    Label:
        id: but
        background_color:1, 0, 0, 0
        text: 'Kg'
        text_size: self.size
        pos_hint: {'x': .6, 'y': .46}
        size_hint: .1, .05
        
    DetailsLabel:
        id: detailslabel
        background_color:1, 0, 1, 1
        pos_hint: {'x': .4, 'y': .93}
        size_hint: .5, .3
        text_size: self.size
        
        
        
        
       

<Max_weightScreen>:
    Max_weightLayout:
        canvas.before:
            BorderImage:
                border: 10, 10, 10, 10
                texture: self.background_image.texture
                pos: self.pos
                size: self.size
        size_hint: .99, .99
        pos_hint: {'center_x': .5, 'center_y': .5}
    Button:
        pos_hint: {'x': .01, 'y': .90}
        size_hint: .50, .10
        background_color:0, 0, 0, 0
        on_press: 
            root.manager.current = "Main"
            root.manager.transition.direction = 'right'


<SessionsScreen>:
    SessionsLayout:
        canvas.before:
            BorderImage:
                border: 10, 10, 10, 10
                texture: self.background_image.texture
                pos: self.pos
                size: self.size
        size_hint: .99, .99
        pos_hint: {'center_x': .5, 'center_y': .5}
    Button:
        pos_hint: {'x': .01, 'y': .90}
        size_hint: .50, .10
        background_color:0, 0, 0, 0
        on_press: 
            root.manager.current = "Main"
            root.manager.transition.direction = 'left'
            

<TimetableScreen>:
    TimetableLayout:
        canvas.before:
            BorderImage:
                border: 10, 10, 10, 10
                texture: self.background_image.texture
                pos: self.pos
                size: self.size
        size_hint: .99, .99
        pos_hint: {'center_x': .5, 'center_y': .5}
    Button:
        pos_hint: {'x': .01, 'y': .90}
        size_hint: .50, .10
        background_color:0, 0, 0, 0
        on_press: 
            root.manager.current = "Main"
            root.manager.transition.direction = 'left'

<MenuScreen>:
    MenuLayout:
        canvas.before:
            BorderImage:
                border: 10, 10, 10, 10
                texture: self.background_image.texture
                pos: self.pos
                size: self.size
        size_hint: .99, .99
        pos_hint: {'center_x': .5, 'center_y': .5}
    Button:
        pos_hint: {'x': .01, 'y': .90}
        size_hint: .50, .10
        background_color:0, 0, 0, 0
        on_press: 
            root.manager.current = "Main"
            root.manager.transition.direction = 'right'
    
''')

#Layout classes

class MainLayout(FloatLayout):

    background_image = ObjectProperty(
        Image(
            source='main1.jpg'))

class AboutLayout(FloatLayout):

    background_image = ObjectProperty(
        Image(
            source='aboutb.png'))

class AboutbLayout(FloatLayout):

    background_image = ObjectProperty(
        Image(
            source='about.png'))

class DetailsLayout(FloatLayout):

    background_image = ObjectProperty(
        Image(
            source='Details.png'))

class Max_weightLayout(FloatLayout):

    background_image = ObjectProperty(
        Image(
            source='max_weight.png'))

class SessionsLayout(FloatLayout):

    background_image = ObjectProperty(
        Image(
            source='sessions.png'))

class TimetableLayout(FloatLayout):

    background_image = ObjectProperty(
        Image(
            source='timetable.png'))

class MenuLayout(FloatLayout):

    background_image = ObjectProperty(
        Image(
            source='menu.png'))

#Screen classes

class MainScreen(Screen):
    pass


class AboutScreen(Screen):
    pass

class SpinnerKg(Spinner):
    values=(str(n) for n in range(40, 120))

class DetailsLabel(Label):



    def __init__(self, text, **kwargs):
        super().__init__(**kwargs)
        self.text = text

    def update_text(self):
        if not os.path.isfile("details.pickle"):
            return self.text == 'Wprowadz dane'
        else:
            return self.text == 'Mamy dane'


class DetailsScreen(Screen):
    pass



class Max_weightScreen(Screen):
    pass


class SessionsScreen(Screen):
    pass

class MenuScreen(Screen):
    pass


class TimetableScreen(Screen):
    pass


#Screen manager

sm = ScreenManager()
sm.add_widget(MainScreen(name='Main'))
sm.add_widget(AboutScreen(name='About'))
sm.add_widget(DetailsScreen(name='Details'))
sm.add_widget(Max_weightScreen(name='Max_weight'))
sm.add_widget(SessionsScreen(name='Sessions'))
sm.add_widget(MenuScreen(name='Menu'))
sm.add_widget(TimetableScreen(name='Timetable'))

#App class

class App(App):


    def build(self):
        crudeclock = DetailsLabel('string')
        Clock.schedule_interval(crudeclock.update_text, 1)
        return sm



if __name__ == '__main__':
    App().run()
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
1

konstruktor w klasie Detailslabel chce dwóch argumentów: text, **kwargs - zmiennej i słownika, a dajesz mu tylko jeden: crudeclock = DetailsLabel('string').


G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Jak w konstruktorze dam crudeclock = DetailsLabel(text, **kwargs) to mam unresolved reference, próbowałem tego wcześniej

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
1

Ehh, chyba Musisz powtórzyć materiał. Konstruktor oczekuje dwóch argumentów formalnych: jakiejś zmiennej, na przykład napisu, integera (Python jest dynamiczny); a drugi argument **kwargs - to skrót - w tym miejscu funkcja oczekuje, że Dasz jej słownik (inaczej hash, parę: klucz, wartość). https://docs.python.org/3/tutorial/datastructures.html#dictionaries


edytowany 1x, ostatnio: lion137
G8
Poczytałem, przejrzałem na stack overflow kilka podobnych przykładów i niestety dalej nie rozumiem. To co innym działa, u mnie nie działa. Jutro kolejne próby. Gdybyś miał jeszcze jakiś link gdzie byłby podobny problem opisany i wytłumaczony byłbym bardzo wdzięczny.
G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Dzięki, poczytam trochę i dalej będę kombinował.

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

Nie zauważyłem, brakuje jeszcze jednej gwiazdki:), jak Chcesz, żeby drugi argument rozwijał się do słownika, to wcześniejszy musi do listy, ewentualny jeszcze wcześniejszy argument mógłby być zmienną, wygląda to tak:

Kopiuj
class Foo(object):
    def __init__(self, *args, **kwargs):
        self.field1 = args
        self.field2_dict = kwargs
    def f(self):
        return [self.field1, self.field2_dict]

arg = ["some-string", 90, 100]
dict1 = {"GIt87": 'coder', 'lion137': 'coder2', '4programmers': 'social_network'}
x = Foo(arg, dict1)
print(x.f()) # -> [(['some-string', 90, 100], {'GIt87': 'coder', 'lion137': 'coder2', '4programmers': 'social_network'}), {}]

Pierwszy argument rozwija sie do listy (może być listą, może być zmienna, lub może go nie być), a drugi do słownika, jak nie będzie on[drugi argument] parą: klucz, wartość, to *args "zje" wszystko i self.field2 zwróci pusty dict. Poeksperymentuj z różnymi danymi i initami, ale parametry formalne mogą być tylko w takich wariantach:

Kopiuj
 def f(arg1, *args, **kwargs)
 def f(*args, **kwargs)   
 def f(**kwargs)
 def f(arg1, *args)    
 def f(*args)

Więcej: Wyszukiwarka i "**kwargs python".


edytowany 1x, ostatnio: lion137
G8
Rozumiem to tak, że nie mogę po prostu wziąć jedną zmienną i zwrócić ją z odpowiednią wartością tylko muszę na siłę tam dać słownik lub listę.
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

Nie Musisz dawać "na siłę" słownika, skoro tam jest **kwargs, to pewnie jest potrzebny.


edytowany 1x, ostatnio: lion137
G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Chcę tylko, żeby funkcja zwróciła mi odpowiednią wartość zmiennej "text", do której odnosi się Label i żeby ta funkcja wywoływała się co sekundę. Napisałem funkjcę savujące dane obliczone na postawie inputu ze spinnerów a ta najprostsza mi coś nie idzie. Ma tylko sprawdzić czy jest plik details.pickle i na tej podstawie zwrócić jedną z 2 wartości Nic więcej. Twój wcześniejszy wpis przeanalizowałem, bardzo dziękuję, posprawdzałem w innym pliku z różnymi danymi - działa, ale ta najprostsza funkcja dalej nie działa.

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

To po prostu Napisz funkcję od jednego argumentu formalnego:

Kopiuj
    def f(arg):
        # TODO

G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0
Kopiuj

#kv:

DetailsLabel:
        id: detailslabel
        background_color:1, 0, 1, 1
        pos_hint: {'x': .4, 'y': .93}
        size_hint: .5, .3
        text_size: self.size
        text: str(root.text)


#python:

class DetailsLabel(Label):
        text = StringProperty

        def update_text(text):
        return 'works!'

class App(App):


    def build(self):
        x = DetailsLabel()
        Clock.schedule_interval(x.update_text, 1)
        return sm

TypeError: update_text() takes 1 positional argument but 2 were given

Kopiuj

#kv:

DetailsLabel:
        id: detailslabel
        background_color:1, 0, 1, 1
        pos_hint: {'x': .4, 'y': .93}
        size_hint: .5, .3
        text_size: self.size
        text: str(root.text)


#python:

class DetailsLabel(Label):
        text = StringProperty

        def update_text(self, text):
        return 'works!'

class App(App):


    def build(self):
        x = DetailsLabel()
        Clock.schedule_interval(x.update_text, 1)
        return sm

program działa ale w miejscu labela wyświetla mi się kivy properties.StringProperty

edytowany 1x, ostatnio: Glt87
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

Popraw: def update_text(self, text)
I Clock.shcedule_interval(x.update_text(<some string variable here>), 1)


G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0
Kopiuj

#kv:
 
DetailsLabel:
        id: detailslabel
        background_color:1, 0, 1, 1
        pos_hint: {'x': .4, 'y': .93}
        size_hint: .5, .3
        text_size: self.size
        text: str(root.text)
 
#python:
 
class DetailsLabel(Label):
        text = StringProperty
 
        def update_text(self, text):
        return 'works!'
 
class App(App):
 
    def build(self):
        x = DetailsLabel()
        Clock.schedule_interval(x.update_text('some string'), 1)
        return sm

ValueError: callback must be a callable, got works!

edytowany 1x, ostatnio: Glt87
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4895
0

To to nie wiem, Kivy nie znam.


G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Jak coś wymyśle to dam znać.

G8
  • Rejestracja:ponad 7 lat
  • Ostatnio:około rok
  • Postów:85
0

Da się zrobić funkcję która ustawia odpowiedni string w text, później zapisuje ją lub zmienia wcześniej zapisaną w pickle/json i wczytuje jeszcze raz okno ładując przy okazji nowy text. Można ją przypisać do każdego możliwego w tym ekranie buttona, spinnera. Niestety Clock na razie mi nie działa.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)