Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten

zunaechst

Für das Python-Lernen ist es in Ordnung, etwas wie "CUI Othello in Python!" Zu kopieren und einzufügen. Das liegt herum, aber rückblickend, was ist los? Selbst wenn Sie versuchen, jeden einzelnen zu verstehen, ist die Menge für Anfänger groß (nicht groß).

Schließlich ist der beste Weg, Wissen zu erwerben, Ihre Hände zu bewegen und es auswendig zu lernen, während Sie sich darüber Sorgen machen! Daher habe ich mich für eine Weile entschieden, CUI Othello als GUI zu verwenden, ohne auf vorhandenen Code angewiesen zu sein. Ich weiß nicht, womit ich anfangen soll ...

Es ist eine übliche Geschichte für Anfänger, etwas Besonderes auszuprobieren und zu frustrieren. Deshalb habe ich vorerst meine Richtung in eine dritte Zeile geändert. Ich habe das Gefühl, dass ich es schaffen kann, indem ich den Pegel ein wenig absenke. Es ist einfach.

Wenn Sie darüber nachdenken, bevor Sie es schaffen, verlieren Sie Ihre Motivation. Deshalb habe ich versucht, eine dritte Zeile mit der Code-Additionsmethode zu erstellen, die nach Bedarf untersucht und implementiert wird.

Der Code, der in der Mitte angezeigt wird, ist aus dem fertigen Produkt ausgeschnitten, daher ist er möglicherweise etwas schwer zu erkennen, aber nicht schlecht. Das große Bild befindet sich am Ende der Seite

Fertiges Bild Tictac.gif

Machen Sie vorerst

Machen Sie zuerst einen Bildschirm. Ausgestattet mit einem Knopf. Ich drücke den Knopf. Ich werde von hier aus beginnen.


from tkinter import *
from tkinter import ttk
from tkinter import messagebox

squares = 3

class TictacApp(ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.create_widgets()
        self.set_value()

    def create_widgets(self):
        for i in range(squares):
            for j in range(squares):
                button = ttk.Button(self, command=self.record(i, j))
                button.bind('<Button-1>', self.mark)
                button.grid(column=i, row=j, sticky=(N, S, E, W))

        for i in range(squares):
            self.columnconfigure(i, weight=1)
            self.rowconfigure(i, weight=1)

        self.master.columnconfigure(0, weight=1)
        self.master.rowconfigure(0, weight=1)

        self.grid(column=0, row=0, sticky=(N, S, E, W))


def main():
    root = Tk()
    root.title('Drei Reihen')
    TictapApp(root)
    root.mainloop()


if __name__ == '__main__':
    main()

Wenn Sie etwas namens Tkinter importieren, können Sie anscheinend GUI-Funktionen installieren. Es scheint, dass Sie das Erscheinungsbild auf verschiedene Arten ändern können, indem Sie der Schaltfläche verschiedene Attribute zuweisen. Hier ist jedoch eine 3x3-Anordnung mit weniger Schaltflächen als der Taschenrechner, während Sie den Taschenrechner imitieren. Wenn sich in der Hauptfunktion mainloop () befindet, können Sie es anscheinend bedienen, solange Sie das Fenster nicht schließen. Es war nicht möglich, eine Funktion in den Button einzufügen, aber aufgrund verschiedener Versuche und Irrtümer hat sie sich auf das oben Gesagte niedergelassen.

Selbst, das Sie sehen können, auch wenn Sie Python nicht mögen. Ich habe es noch nicht vollständig verstanden, aber wenn ich die in mehreren Funktionen verwendeten Variablen mit self definiere, kann ich es verwalten. Es geht um Anerkennung.

Wenn Sie fortfahren, während Sie es ausführen, können Sie Ihre Motivation beibehalten, als ob etwas abgeschlossen wäre, und Sie können fühlen, welcher Code welche Rolle spielt. Deshalb habe ich ihn dieses Mal verwendet, als ich etwas anderes machen wollte. Es scheint, dass die Teile als Geschäftsreise-Set angewendet werden können.


def mark(self, event):
        if not event.widget['text']:
            if self.player == 1:
                event.widget['text'] = str('〇')
            else:
                event.widget['text'] = str('×')

Wenn der Bildschirm erstellt wird, werden wir dieses Mal Funktionen hinzufügen. Wenn Sie die Taste drücken, möchten Sie 〇 oder × dort anzeigen, wo Sie sie drücken. Fügen Sie daher der Tictac-Klasse die Markierungsfunktion hinzu. Wenn Sie die Bindemethode von Button verwenden, können Sie die Funktion anscheinend ausführen, wenn die Taste gedrückt wird. Erstellen Sie daher eine Funktion, die beim Drücken Zeichen auf der Schaltfläche anzeigt. Überschreiben Sie den Text von event.widget mit str ('Zeichenfolge').


    def record(self, i, j):
        def x():
            if not self.field[i][j]:
                self.field[i][j] = self.player
                self.line_check()
                self.change_player()
                self.clear()
        return x

    def set_value(self):
        self.player = 1
        self.field = []
        for i in range(squares):
            self.field.append(['' for i in range(squares)])
        self.finish = 0

Wenn Sie eine Taste drücken können, müssen Sie anscheinend aufzeichnen, welcher Spieler welche Taste gedrückt hat. Erstellen Sie daher eine Aufnahmefunktion. Ich habe eine set_value-Funktion erstellt, da anscheinend auch der Container verwendet wird, der den Datensatz enthält. Zusätzlich sind die aktuellen Spielerinformationen und die Parameter für die endgültige Entscheidung enthalten. In der Aufnahmefunktion werden die Erfassungsinformationen des Spielers im Container festgelegt, es wird beurteilt, ob die drei Zeilen in einer Reihe stehen, die Spieler werden ersetzt, und wenn sie erledigt sind, wird das Brett in den Ausgangszustand zurückversetzt. Ich war sehr beschäftigt. Es ist ein schlechter Teil der Code-Additionsmethode.


    def line_check(self):
        cross = 0
        for i in range(squares):
            horizon = 0
            vertical = 0
            for j in range(squares):
                if self.field[i][j] == self.player:
                    horizon += 1
                if self.field[j][i] == self.player:
                    vertical += 1
            if self.field[i][i] == self.player:
                cross += 1
            if horizon == 3 or vertical == 3 or cross == 3:
                self.game_end()
        if self.field[0][2] == self.field[1][1] == self.field[2][0] == self.player:
            self.game_end()

Da festgestellt werden musste, ob die dritte Zeile ausgerichtet war, habe ich eine Funktion line_check erstellt. Wenn Sie vertikal, horizontal und diagonal nach innen schauen und es drei Werte gibt, die mit denen des Spielers identisch sind, ist das Spiel beendet. Das letzte diagonale Urteil wurde mit Gewalt gelöst.


    def game_end(self):
        if self.player == 1:
            messagebox.showinfo('Siedlung', 'Der führende Spieler gewinnt!')
        else:
            messagebox.showinfo('Siedlung', 'Der zweite Spieler gewinnt!')
        self.finish = 1

Wenn Sie drei aufstellen, müssen Sie uns den Sieg oder die Niederlage mitteilen. Eine Implementierung der Funktion game_end. Wenn die Funktion game_end aufgerufen wird, wird ein Meldungsfeld angezeigt, das Sie über das Ergebnis informiert und ein Abrechnungsflag setzt.


    def change_player(self):
        if self.finish == 0:
            self.player = -self.player

    def clear(self):
        if self.finish == 1:
            self.create_widgets()
            self.set_value()

Wenn es nicht erledigt ist, wird der Spieler ersetzt, und wenn dies der Fall ist, wird das Brett erneut erstellt und initialisiert. So wird die dritte Reihe von Menschen vervollständigt.

Eindrücke, die ich gemacht habe

Ich habe den Code sofort hinzugefügt, so dass es am Ende extrem schwer zu sehen war. .. .. Es ist fertig, also ist es okay! Wenn Sie versuchen, es schön zu machen, während Sie über das gesamte Bild nachdenken, wird es unangenehm sein, aber wenn Sie während der Erstellung nach Bedarf Funktionen hinzufügen, ist es meiner Meinung nach einfach, es zu Ende zu bringen, während die Motivation so bleibt, wie es ist. Es war leicht zu verdauen, da ich jedes Mal nachprüfte, wenn ich sie einzeln hinzufügte.

Dieses Mal habe ich die Funktion des Drückens einer Taste gelernt, um eine Funktion auszuführen. Als nächstes möchte ich etwas mit mehr Funktionen machen, während ich es einbeziehe.

Der gesamte Code des fertigen Produkts


from tkinter import *
from tkinter import ttk
from tkinter import messagebox

squares = 3


class TictacApp(ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.create_widgets()
        self.set_value()

    def set_value(self):
        self.player = 1
        self.field = []
        for i in range(squares):
            self.field.append(['' for i in range(squares)])
        self.finish = 0

    def create_widgets(self):
        for i in range(squares):
            for j in range(squares):
                button = ttk.Button(self, command=self.record(i, j))
                button.bind('<Button-1>', self.mark)
                button.grid(column=i, row=j, sticky=(N, S, E, W))

        for i in range(squares):
            self.columnconfigure(i, weight=1)
            self.rowconfigure(i, weight=1)

        self.master.columnconfigure(0, weight=1)
        self.master.rowconfigure(0, weight=1)

        self.grid(column=0, row=0, sticky=(N, S, E, W))

    def mark(self, event):
        if not event.widget['text']:
            if self.player == 1:
                event.widget['text'] = str('〇')
            else:
                event.widget['text'] = str('×')

    def record(self, i, j):
        def x():
            if not self.field[i][j]:
                self.field[i][j] = self.player
                self.line_check()
                self.change_player()
                self.clear()
        return x

    def change_player(self):
        if self.finish == 0:
            self.player = -self.player

    def line_check(self):
        cross = 0
        for i in range(squares):
            horizon = 0
            vertical = 0
            for j in range(squares):
                if self.field[i][j] == self.player:
                    horizon += 1
                if self.field[j][i] == self.player:
                    vertical += 1
            if self.field[i][i] == self.player:
                cross += 1
            if horizon == 3 or vertical == 3 or cross == 3:
                self.game_end()
        if self.field[0][2] == self.field[1][1] == self.field[2][0] == self.player:
            self.game_end()

    def game_end(self):
        if self.player == 1:
            messagebox.showinfo('Siedlung', 'Der führende Spieler gewinnt!')
        else:
            messagebox.showinfo('Siedlung', 'Der zweite Spieler gewinnt!')
        self.finish = 1

    def clear(self):
        if self.finish == 1:
            self.create_widgets()
            self.set_value()


def main():
    root = Tk()
    root.title('Drei Reihen')
    TictacApp(root)
    root.mainloop()


if __name__ == '__main__':
    main()

Recommended Posts

Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Ich habe versucht, Kanas handschriftliche Zeichenerkennung Teil 3/3 Zusammenarbeit mit der GUI mithilfe von Tkinter durchzuführen
Ich habe versucht, mit Python faker verschiedene "Dummy-Daten" zu erstellen
Fraktal zum Erstellen und Spielen mit Python
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
[Python] Ich habe versucht, mit tkinter eine Anwendung zu erstellen, die das Gehalt anhand der Arbeitszeit berechnet
Ich möchte ein Spiel mit Python machen
Ich habe Jacobian und teilweise Differenzierung mit Python versucht
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe Funktionssynthese und Curry mit Python versucht
[AWS] [GCP] Ich habe versucht, die Verwendung von Cloud-Diensten mit Python zu vereinfachen
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
[Zaif] Ich habe versucht, den Handel mit virtuellen Währungen mit Python zu vereinfachen
Ich habe fp-Wachstum mit Python versucht
Programmieren mit Python und Tkinter
Ich habe versucht, mit Python zu kratzen
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Versuchen Sie es mit GUI, PyQt in Python
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Ich habe verschiedene Methoden ausprobiert, um japanische Post mit Python zu senden
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
[GUI in Python] PyQt5-Drag & Drop-