• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Projektowanie interfejsu graficznego python

Object Storage Arubacloud
0 głosów
313 wizyt
pytanie zadane 14 lutego 2023 w Python przez Maestro_prosiak Początkujący (310 p.)

Chodzi o stworzenie interfejsu graficznego dla prostego programu typu chatbot/asystent (wystarczy zwykłe pole), do którego będzie się wpisywać zamiast w konsoli debug/run komendy (przykładowo w pycharmie)  to w zaprogramowanym okienku. Zaznaczam że dopiero zaczynam z Pythonem ( to mój pierwszy większy projekt). Jakie biblioteki, publikacje albo jakieś poradniki polecacie?  tutaj skrócona wersja kodu:

import random
import re
import webbrowser
from gtts import gTTS
import os
import pygame
import wikipediaapi
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from answers import answers

directory = "C:/chatbot/logi"
if not os.path.exists(directory):
    os.makedirs(directory)
directory = "C:/chatbot/notatki"
if not os.path.exists(directory):
    os.makedirs(directory)

# odtwarzanie głosowe
def read_aloud(text):
    tts = gTTS(text=text, lang='pl')
    tts.save("response.mp3")
    pygame.init()
    pygame.mixer.init()
    pygame.mixer.music.load("response.mp3")
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy() == True:
        continue
    pygame.mixer.music.stop()
    pygame.quit()
    os.remove("response.mp3")
#wprowadzanie głosowe


# formatowanie tekstu
def preprocess_question(question):
    # usuwanie znaków zapytania i przecinków
    question = re.sub("[?,]", "", question)
    # zamiana na małe litery
    return question.lower()



# wikipedia
wiki_wiki = wikipediaapi.Wikipedia(language='pl', extract_format=wikipediaapi.ExtractFormat.WIKI)


# notatki
def create_note(title, text):
    note = title + "\n" + text
    with open(os.path.join("C:/chatbot/notatki", title + ".txt"), "w") as f:
        f.write(note)


def open_note(title):
    with open(os.path.join("C:/chatbot/notatki", title + ".txt"), "r") as f:
        return f.read()


# e-mail - 1
def send_email(to, subject, message):
    # Tworzenie obiektu MIMEMultipart
    msg = MIMEMultipart()
    # Dodawanie nagłówków
    msg['From'] = "antekswi123@gmail.com"
    msg['To'] = to
    msg['Subject'] = subject
    # Dodawanie treści wiadomości
    msg.attach(MIMEText(message, 'plain'))
    # Wysyłanie wiadomości
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login("antekswi123@gmail.com", "pasztet888")
    server.send_message(msg)
    server.quit()


# wikipedia - 2
def search_wikipedia(query):
    page_py = wiki_wiki.page(query)
    if page_py.exists():
        return page_py.text[0:min(len(page_py.text), 1500)]
    else:
        return "Nie znalazłem artykułu"


def chatbot_response(question):
    preprocessed_question = preprocess_question(question)

    if preprocessed_question in answers:
        return random.choice(answers[preprocessed_question])

    # sprawdzenie, czy pytanie zaczyna się od "otworz "

    if preprocessed_question.startswith("otwórz "):
        # otwieranie pliku chrome


        if preprocessed_question == "otwórz chrome":
            webbrowser.open("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe")
            return "Otwieranie Chrome"
        else:
            return "Nieznana komenda"

    # Wyszukiwanie w googl

    elif preprocessed_question.startswith("wyszukaj") or preprocessed_question.startswith(
            "znajdź") or preprocessed_question.startswith("szukaj") or preprocessed_question.startswith(
            "co to") or preprocessed_question.startswith("kto to") or preprocessed_question.startswith("czym jest"):

        query = preprocessed_question.replace("wyszukaj", "").replace("znajdź", "").replace("szukaj", "").replace(
            "co to", "").replace("kto to", "").replace("czym jest", "").strip()
        webbrowser.open(f"https://www.google.com/search?q={query}")
        return f"Wyszukiwanie '{query}' w Google"


    #kod
    ##################################### wikipedia ciąg dalszy

    if "wikipedia" in preprocessed_question or "wikipedii" in preprocessed_question:
        query = preprocessed_question.replace("wikipedia", "").replace("wikipedii", "").strip()
        response = search_wikipedia(query)
        return response


    # mail ciąg dalszy

    elif preprocessed_question == "wyślij maila" or preprocessed_question == "mail" or preprocessed_question == "e-mail" or preprocessed_question == "wyślij e-mail":
        read_aloud("Rozpoczynanie funkcji wysyłania e-maila. Podaj adres e-mail odbiorcy:")
        recipient_email = input("Podaj adres e-mail odbiorcy: ")
        read_aloud("Podaj temat e-maila:")
        subject = input("Podaj temat e-maila: ")
        read_aloud("Podaj treść e-maila:")
        message = input("Podaj treść e-maila: ")
        send_email(recipient_email, subject, message)
        return "Wysłano e-mail"

    # notatka ciąg dalszy

    if question.startswith("utwórz notatkę") or question.startswith("zrób notatkę") or question.startswith("notatka") or question.startswith("dodaj notatkę"):
        title = input("Podaj tytuł notatki: ")
        te = input("Podaj treść notatki: ")
        create_note(title, te)
        return "Notatka została utworzona"
    elif question.startswith("otwórz notatkę") or question.startswith("pokaż notatkę") or question.startswith(
            "uruchom notatkę"):
        title = input("Podaj tytuł notatki: ")
        text = open_note(title)
        return te

    # pytania i odpowiedzi 2

    elif preprocessed_question in answers:
        # losowe wybranie odpowiedzi z dostępnych
        return random.choice(answers[preprocessed_question])
    else:
        with open("C:/chatbot/logi/logi.txt", "a") as f:
            f.write("Pytanie: " + question + "\n")
            f.write("Odpowiedź: Brak odpowiedzi\n")
        return "Niestety nie jestem w stanie odpowiedzieć na to pytanie."

while True:
    question = input("Pytanie: ")
    response = chatbot_response(question)
    print("Odpowiedź: ", response)
    read_aloud(response)

 

komentarz 15 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
W przypadku akurat tej appki, wydaje mi się, że PyQt lub PySide będą najlepszym wyborem.

2 odpowiedzi

+2 głosów
odpowiedź 15 lutego 2023 przez tubylec01 Obywatel (1,290 p.)
wybrane 15 lutego 2023 przez Maestro_prosiak
 
Najlepsza
Polecam kivy na licencji MIT ;)
komentarz 15 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
edycja 15 lutego 2023 przez reaktywny
Tak, zwłaszcza w połączeniu z KivyMD - wychodzą eleganckie appki. I mamy więcej platform, na które można pisać.

Tu są różnice Kivy vs PyQt:

https://www.educba.com/kivy-vs-pyqt/
komentarz 15 lutego 2023 przez tubylec01 Obywatel (1,290 p.)

@reaktywny Masz może duże doświadczenie mówiąc potocznie w robienia exe'ka z kivy?

2
komentarz 15 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
edycja 15 lutego 2023 przez reaktywny
EXE robisz, tak jak inne binarki pod desktop z użyciem PyInstaller - tu masz to dobrze opisane:

https://kivy.org/doc/stable/guide/packaging-windows.html

Jak nie znasz plików .spec - to warto poczytać o nich jeszcze w innych źródłach.

Jak nie masz jakichś trudnych (kłopotliwych) zależności to wykonanie EXE-ka jest b. proste.

Jakbyś chciał zrobić appki mobilne, to z kolei używa się Buildozer-a.

Z appkami pod desktop nie było nigdy problemów, natomiast kiedyś użycie Buildozera było wyjatkowo trudne, teraz już chyba nie
komentarz 15 lutego 2023 przez tubylec01 Obywatel (1,290 p.)
Próbowałem wiele razy ale za każmy razem mam błąd, spróbuje jeszcze kilka razy ale mógłbym przyjść po jakąś radę informację jeśli znowu mi nie wyjdzie?

Nie wiem czy problem wynika z samych skryptów (w sumie jeden plik), czy z czegoś innego.
komentarz 15 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
Podaj na forum całą treść otrzymywanych błędów i plik .spec.
komentarz 15 lutego 2023 przez tubylec01 Obywatel (1,290 p.)
Jeszcze tylko dopytam w tym wątku czy stworzyłeś kiedyś pojedynczy plik, czy zawsze folder?
komentarz 15 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
edycja 15 lutego 2023 przez reaktywny

Można tak i tak, ale zwykle zależy mi na jednym pliku czyli opcji --onefile lub -F.

Przy defaultowej opcji (onedir) musisz przenieść wszystko na inny komputer, inaczej program nie odpali się tam. Przy opcji onefile, wystarczy przenieść binarny plik EXE - na wypadek jakbyś chciał się podzielić z kimś aplikacją.

Czasem warto użyć też -w albo  --windowed jeśli nie chcesz appki consol-owej. A tu masz GUI. Ale to też zależy od docelowego systemu.

+2 głosów
odpowiedź 14 lutego 2023 przez tangarr Mędrzec (154,860 p.)
Moją ulubioną biblioteką do tworzenie GUI jest Qt. Biblioteka posiada przyjemne bindingi do Pythona.
https://www.qt.io/qt-for-python
komentarz 14 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
Tak PyQt i PySide są super - oba różnią się głównie licencją, w kodzie są nieduże różnice.

Podobne pytania

0 głosów
0 odpowiedzi 208 wizyt
0 głosów
1 odpowiedź 525 wizyt
pytanie zadane 1 stycznia 2021 w Python przez Hacker4300.exe Użytkownik (650 p.)
0 głosów
0 odpowiedzi 896 wizyt
pytanie zadane 29 sierpnia 2019 w Python przez Wiktor Michalski Początkujący (430 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...