web-dev-qa-db-fra.com

Comment faire une fenêtre avec des boutons en python

Comment créer une fonction qui crée une fenêtre avec deux boutons, chaque bouton ayant une chaîne spécifiée et, en cas de clic, renvoyant une variable spécifiée? Semblable à @ 3:05 dans cette vidéo https://www.khanacademy.org/science/computer-science-subject/computer-science/v/writing-a-simple-factorial-program---python-2 (Je sais que c'est un tutoriel pour un programme pour débutants très facile, mais c'est la seule vidéo que j'ai pu trouver) mais sans la zone de texte et j'ai davantage de contrôles sur ce que font les boutons 'ok' et 'cancel'.

Dois-je créer une fenêtre, dessiner un rect avec une chaîne à l'intérieur, puis créer une boucle qui vérifie le mouvement de la souris/les clics de souris, puis renvoyer quelque chose une fois que les coordonnées de la souris sont à l'intérieur de l'un des boutons et la souris est-elle cliquée? Ou existe-t-il une fonction/un ensemble de fonctions qui faciliterait une fenêtre avec des boutons? Ou un module?

5
user2874724

Aperçu

Non, vous n'avez pas à "dessiner un rect, puis à faire une boucle". Ce que vous allez devez faire, c'est importer une boîte à outils d'interface graphique et utiliser les méthodes et les objets intégrés à cette boîte à outils. De manière générale, l’une de ces méthodes consiste à exécuter une boucle qui écoute les événements et appelle des fonctions en fonction de ces événements. Cette boucle s'appelle une boucle d'événement. Ainsi, bien qu'une telle boucle doive être exécutée, vous n'avez pas à la créer.

Mises en garde

Si vous souhaitez ouvrir une fenêtre à partir d'une invite telle que dans la vidéo à laquelle vous avez accédé, le problème est un peu plus difficile. Ces boîtes à outils ne sont pas conçues pour être utilisées de cette manière. En général, vous écrivez un programme complet basé sur une interface graphique où toutes les entrées et sorties sont effectuées via des widgets. Ce n'est pas impossible, mais à mon avis, lors de l'apprentissage, vous devez vous en tenir à tout le texte ou à toutes les interfaces graphiques et ne pas mélanger les deux. 

Exemple d'utilisation de Tkinter

Par exemple, un de ces outils est tkinter. Tkinter est la boîte à outils intégrée à python. Toute autre boîte à outils telle que wxPython, PyQT, etc. sera très similaire et fonctionnera tout aussi bien. L’avantage de Tkinter est que vous l’avez probablement déjà et qu’il s’agit d’une boîte à outils fantastique pour l’apprentissage de la programmation par interface graphique. C'est également fantastique pour une programmation plus avancée, bien que vous rencontriez des personnes en désaccord avec ce point. Ne les écoute pas. 

Voici un exemple dans Tkinter. Cet exemple fonctionne avec Python 2.x. Pour Python 3.x, vous devrez importer depuis tkinter plutôt que Tkinter.

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        # create a Prompt, an input box, an output label,
        # and a button to do the computation
        self.Prompt = tk.Label(self, text="Enter a number:", anchor="w")
        self.entry = tk.Entry(self)
        self.submit = tk.Button(self, text="Submit", command = self.calculate)
        self.output = tk.Label(self, text="")

        # lay the widgets out on the screen. 
        self.Prompt.pack(side="top", fill="x")
        self.entry.pack(side="top", fill="x", padx=20)
        self.output.pack(side="top", fill="x", expand=True)
        self.submit.pack(side="right")

    def calculate(self):
        # get the value from the input widget, convert
        # it to an int, and do a calculation
        try:
            i = int(self.entry.get())
            result = "%s*2=%s" % (i, i*2)
        except ValueError:
            result = "Please enter digits only"

        # set the output widget to have our result
        self.output.configure(text=result)

# if this is run as a program (versus being imported),
# create a root window and an instance of our example,
# then start the event loop

if __== "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()
9
Bryan Oakley

Vous devriez jeter un oeil à wxpython , une bibliothèque d’interface graphique avec laquelle il est très facile de commencer si vous avez des connaissances en python.

Le code suivant va créer une fenêtre pour vous ( source ):

import wx

app = wx.App(False)  # Create a new app, don't redirect stdout/stderr to a window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World") # A Frame is a top-level window.
frame.Show(True)     # Show the frame.
app.MainLoop()

Jetez un oeil à cette section section (comment créer des boutons). Mais commençons par le instructions d'installation .

0
Chigurh

tkinter est une bibliothèque graphique, ce code crée de simples boutons sans texte:

 import tkinter as tk
 class Callback:
     def __init__(self, color):
         self.color = color
     def changeColor(self): 
         print('turn', self.color)
 c1 = Callback('blue')
 c2 = Callback('yellow')
 B1 = tk.Button(command=c1.changeColor) 
 B2 = tk.Button(command=c2.changeColor) 
 B1.pack()
 B2.pack()
0
Ieshaan Saxena
#Creating a GUI for entering name
def xyz():
    global a
    print a.get() 
from Tkinter import *
root=Tk()  #It is just a holder
Label(root,text="ENter your name").grid(row=0,column=0) #Creating label
a=Entry(root)           #creating entry box
a.grid(row=7,column=8)
Button(root,text="OK",command=xyz).grid(row=1,column=1)
root.mainloop()           #important for closing th root=Tk()

Ceci est la base.

0
Kunal Munjal