Próbuję zrobić coś kontrolowanego przez interfejs GUI Pythona.
Jedyną rzeczą jest to, że nie wiem, jak zrobić to całe wejście / wyjście. Chcę tylko móc wpisać dane wejściowe, wykonać polecenie python i podać dane wyjściowe polecenia python. Wiem, że IDLE jest zrobione w Tkinter, więc używa widżetów?
To dosłownie tylko „wejście typu, pokaż wyjście”.
Próbowałem go wyszukać, ale wygląda na to, że większość wyników dotyczy wiersza poleceń, ale nie tego szukam. Jedyne inne pytanie, które było dokładnie takie jak moje, nie dotyczyło również tego, co miałem na myśli. Próbowałem również zlokalizować kod źródłowy dla IDLE, ale nie mogłem znaleźć tego, czego szukałem.
Znalazłem kilka odpowiedzi, które działają w systemie Linux, ale korzystam z systemu Windows 10 ...
Potrzebuję „powłoki”, aby być w Tkinter, ponieważ po jednej stronie ekranu będzie coś innego, co jest podłączone do wyjść poleceń.
Czy ktoś wie, że widżety zostały użyte do stworzenia bardzo prostej powłoki Pythona?
źródło
Odpowiedzi:
Prosta powłoka Pythona / Terminal / Wiersz polecenia
type input
show output
Powyższy skrypt Pythona ma następującą hierarchię, jak podano;
Przepływ pracy:
Podstawowy przepływ pracy dla powyższego kodu podano w następujący sposób;
def welcome_note():...
Zawiera etykietę, która będzie wyświetlana poza treścią tekstu.def get_text(self):...
Wykonuje dwie operacje; ** Pobierz tekst z tekstu ** i ** Ustaw dane wyjściowe w polu wprowadzania **.def store_commands(self, command):...
Służy do przechowywania zmiennych w pliku.def get_stored_commands(self):
... Pobierz zmienną zapisaną w pliku.def check_if_file_empty():
... Sprawdź rozmiar pliku.def run_commands(self, command):...
Ta metoda działa jako kompilator Pythona, który przyjmuje polecenia, wykonuje przetwarzanie i generuje dane wyjściowe dla podanego polecenia. Aby uruchamiać polecenia, polecam ich używać,subprocess-module
ponieważ zapewnia ono bardziej zaawansowane funkcje do odradzania nowych procesów i pobierania ich wyników; Aby uruchomić polecenia systemu Windows za pomocą Pythona, zawiera różne wbudowane biblioteki, takie jak;1. os ( szczegółowo ), 2. podproces ( szczegółowo ) itp.
Aby sprawdzić, który jest lepszy w użyciu, odwiedź odnośnik: moduł podprocesowy jest lepszy niż moduł os .
def start_terminal(self):...
Ta metoda obejmuje po prostu funkcję inicjowaniatkinter
okna sesji i pokazania podstawowego układu okna wprowadzania i wyświetlania.Obejście:
Ta prosta
tkinter GUI based python shell
wykonuje prostą funkcjonalność jako wiersz polecenia systemu Windows. Aby uruchamiać polecenia pythondirectly
w wierszu polecenia bez przechodzenia do terminala python, wykonujemy proste jako;Jego wynik byłby prosty jak;
Podobnie, aby uruchomić więcej niż jedną linię bezpośrednio na raz, jak podano;
Jego wyniki byłyby takie;
Więc użyć tego
tkinter python shell
;Albo możesz umieścić polecenie jako;
lub w ten sposób;
lub po prostu polecenie wbudowane jako
Otrzymasz ten sam wynik.
źródło
input
,output
shell. Działa jak podstawowypython kernel
. Działa tylko na których jest umieszczony w tekście . Nie ustawiłem żadnego bufora ani pamięci podręcznej do przechowywania historii zmiennych. Pozwól, że sprawdzę najpierw ten wymóg w tym IDLE!Jest to prosta powłoka używana głównie
exec()
do wykonywania instrukcji python isubprocess.Popen()
wykonywania poleceń zewnętrznych:Wystarczy wpisać normalną instrukcję python:
Lub wprowadź polecenie powłoki:
Możesz także użyć
Up
klawisza do przywołania ostatniego polecenia.Pamiętaj, że jeśli wykonasz polecenie systemowe wymagające wprowadzenia danych przez użytkownika, powłoka zostanie zamrożona na 5 sekund (użyto limitu czasu
communicate()
).Możesz zmodyfikować
on_key()
funkcję w zależności od potrzeb.Przypominamy również, że używanie
exec()
nie jest dobrą praktyką.źródło
Zaimplementowałem powłokę Pythona,
code.InteractiveConsole
aby wykonać polecenia dla projektu. Poniżej znajduje się uproszczona wersja, choć wciąż dość długa, ponieważ napisałem powiązania dla klawiszy specjalnych (takich jak Return, Tab ...), które zachowują się jak w konsoli Pythona. Można dodać więcej funkcji, takich jak autouzupełnianie za pomocą jedi i podświetlanie składni za pomocą pygmentów.Główną ideą jest to, że używam
push()
metodycode.InteractiveConsole
do wykonywania poleceń. Ta metoda zwraca,True
jeśli jest to polecenie częściowe, np.def test(x):
I używam tej informacji zwrotnej, aby wstawić...
monit, w przeciwnym razie dane wyjściowe zostaną wyświetlone i zostanie wyświetlone nowe>>>
zapytanie. Przechwytywam dane wyjściowe za pomocącontextlib.redirect_stdout
.Jest też dużo kodu obejmującego znaki i porównywanie indeksów, ponieważ uniemożliwiam użytkownikowi wstawianie tekstu do wcześniej wykonanych poleceń. Chodzi o to, że utworzyłem znak „wejście”, który mówi mi, gdzie jest początek aktywnego monitu, i
self.compare('insert', '<', 'input')
mogę wiedzieć, kiedy użytkownik próbuje wstawić tekst powyżej aktywnego monitu.źródło