J'ai fait un compteur de caractères avec Python

introduction

Utiliserez-vous Word de Microsoft? Lorsque j'écris un rapport universitaire, lorsque je le soumets au format Word, je lance Word et rédige le rapport. Récemment, j'écris de plus en plus de rapports en utilisant Google Documents ... mais je n'écris pas assez de phrases pour ouvrir Word dans le monde ... Je n'ai pas besoin de lancer un navigateur et d'ouvrir Google Documents ... N'est-ce pas juste un mémo? (Juste moi?) A cette époque, vous souhaitez souvent compter le nombre de caractères ... (Wata ry) C'est pourquoi j'ai créé un compteur de caractères en Python. Pour les personnes occupées, le code source est [ici. ](# 4-Code source)

environnement

Mac OS Catalina Python 3.7.6 PySimpleGUI 4.18.2

0. Table des matières

  1. [Bibliothèque](# 1-Bibliothèque)
  2. [Fonctions requises](# 2-Fonctions requises)
  3. [Mise en œuvre](# 3-Mise en œuvre)
  4. [Code source](# 4-Code source)
  5. [Résumé](# 5-Résumé)
  6. [Références](# 6-Références)

1. Bibliothèque

Quand il s'agit d'implémenter l'interface graphique en Python, je pense que la première chose qui me vient à l'esprit est Tkinter. J'ai pensé à l'implémenter dans Tkinter, mais j'ai pensé que c'était un peu compliqué ... alors j'ai cherché une autre bonne bibliothèque et l'ai trouvée, ** [PySimpleGUI](https: /) /pysimplegui.readthedocs.io/en/latest/) **. Donc, cette fois, nous allons procéder à l'implémentation en utilisant cette bibliothèque.

2. Fonctions requises

En tant que fonction dont j'ai personnellement besoin pour le compteur de caractères,

-Bouton Quit

C'est plutôt bien s'il y en a assez. Les fonctions minimales requises sont suffisantes. Parce que je bouge juste un peu. Nous mettrons en œuvre ces trois.

3. Mise en œuvre

Tout d'abord, installez l'interface graphique PySimple. Si vous ne l'avez pas encore installé, dans le terminal

pip install pysimplegui

Entrer.

Une fois l'installation terminée, nous commencerons à l'implémenter immédiatement.

Ce que j'ai importé cette fois

Il y en a deux.

Définissez le thème au début. J'ai choisi `` DarkAmber '' parce que j'aime son apparence. Cette zone est votre choix. Pour plus d'informations, rendez-vous sur ici.

wordcounter.py


import PySimpleGUI as sg
import re

sg.theme('DarmAmber')

Ceci termine les paramètres du thème. Ensuite, considérez la disposition de l'interface graphique. La disposition est

layout = []

Il peut être défini librement sous la forme d'un tableau. je

wordcounter.py


import PySimpleGUI as sg 
import re

sg.theme('DarkAmber')

layout = [
	[sg.Text('Word Counter')],
	[sg.Multiline((), size=(70, 30))],
	[sg.Submit(button_text='Count', size=(5, 1)), sg.Button('Quit', size=(5, 1))],
	[sg.Button('Delete', size=(5, 1)), sg.Button('Save', size=(5, 1))]
]

Je l'ai fait comme ça. Alors ça ressemble à ça.

image1

N'est-ce pas assez intuitif d'écrire?

Grosso modo,

--``` Texte () affiche la zone de texte sur une ligne

size=()Vous permet de spécifier la taille de l'élément. 1=Il peut être compté avec un caractère, donc dans mon casmultiline(), size=(70, 30)Ensuite, la taille de la zone de texte estVertical 70 caractères x horizontal 30 caractèresC'est réglé comme ça.

Pour être honnête, je ne comprends pas vraiment la différence entre Soumettre () '' et Bouton () '', mais cette fois ça marche bien donc je vais le laisser tel quel ...

Lorsque la mise en page est terminée, le reste définit le mouvement lorsque le bouton est enfoncé. Et avant cela, affichons la mise en page créée.

wordcounter.py


import PySimpleGUI as sg 
import re

sg.theme('DarkAmber')

layout = [
	[sg.Text('Word Counter')],
	[sg.Multiline((), size=(70, 30))],
	[sg.Submit(button_text='Count', size=(5, 1)), sg.Button('Quit', size=(5, 1))],
	[sg.Button('Delete', size=(5, 1)), sg.Button('Save', size=(5, 1))]
]

window = sg.Window('Word Counter', layout)

#réduction

	
window.close()

J'ai ajouté

window = sg.Window('Word Counter', layout)

Quand

window.close()

est. Le reste du programme est écrit entre les deux. whileJe vais le mettre en œuvre avec une déclaration.

wordcounter.py


#réduction
while True:
	event, values = window.read()

	if event is None:
		print('No words')
		break

	if event == 'Count':
		show_message = len(values[0]) - 1
		print(show_message)

		sg.popup('Result', show_message)

	if event == 'Quit':
		break

	if event == 'Delete':
		sg.PopupYesNo('Are you really?')
		if 'Yes':
			values[0] = re.sub()

Ci-dessous, «si» et les suivants sont décrits individuellement.

if event is None:
		print('No words')
		break

Décrit le mouvement lorsque le bouton x est enfoncé.

if event == 'Count':
		show_message = len(values[0]) - 1
		print(show_message)

		sg.popup('Result', show_message)

C'est le principal. Attribuez la valeur de la zone de texte à la variable show_messagecomme comptée par` `len ()` ``. Dans PySimpleGUI, il semble que les valeurs mises dans la zone de texte ou la zone puissent être obtenues par `` `values [] ''. Il semble y avoir un autre moyen.len(values[0]) - 1```La raison en est qu'après l'avoir vérifié plusieurs fois, pour une raison quelconque, un nombre de plus que le nombre de caractères saisis dans le texte est affiché.-La queue du livre est ajustée avec 1. Pourquoi? Quoi qu'il en soit, je suis content que ça marche parce que ça marche. Si vous connaissez une meilleure façon d'écrire, veuillez nous en informer.

if event == 'Quit':
		break

Tel quel. Appuyez sur `` Quitter '' pour quitter le programme.

if event == 'Delete':
		sg.PopupYesNo('Are you really?')
		if 'Yes':
			values[0] = re.sub()

Je n'ai pas encore implémenté cela, mais je souhaite supprimer toutes les chaînes de la zone de texte lorsque j'appuie sur `` Supprimer '' ... mais cela ne fonctionne pas. Je pense que je vais utiliser une expression régulière pour l'effacer, mais je pense qu'il y a une meilleure façon ... mais je ne peux pas y penser et la laisser telle quelle. Eh bien, ce n'est pas grave si vous n'avez pas cette fonctionnalité, mais j'aimerais la rendre encore plus pratique ... S'il vous plaît, aidez tous ceux qui la connaissent.

Cela complète l'outil avec les fonctionnalités que je voulais.

4. Code source

Voici le code source.

<détails>

Code source </ summary>

wordcounter.py


import PySimpleGUI as sg 
import re

sg.theme('DarkAmber')

layout = [
	[sg.Text('Word Counter')],
	[sg.Multiline((), size=(70, 30))],
	[sg.Submit(button_text='Count', size=(5, 1)), sg.Button('Quit', size=(5, 1))],
	[sg.Button('Delete', size=(5, 1)), sg.Button('Save', size=(5, 1))]
]

window = sg.Window('Word Counter', layout)

while True:
	event, values = window.read()

	if event is None:
		print('No words')
		break

	if event == 'Count':
		show_message = len(values[0]) - 1
		print(show_message)

		sg.popup('Result', show_message)

	if event == 'Quit':
		break

	if event == 'Delete':
		sg.PopupYesNo('Are you really?')
		if 'Yes':
			values[0] = re.sub()

	
window.close()
C'est à peu près ça. court. Même avec cela, je peux exécuter les fonctions minimales nécessaires, donc c'est très utile personnellement. J'ai utilisé Automator sur mon Mac pour automatiser l'appel dans une certaine mesure, et Alfred pour taper des commandes et les faire fonctionner immédiatement. J'écrirai un article à ce sujet si j'ai une chance.

5. Résumé

J'ai pu créer un compteur de personnage de cette manière. Il existe de nombreux outils similaires sans avoir à écrire du code, mais il serait intéressant de s'amuser pour créer son propre outil, n'est-ce pas? J'y suis assez attaché et je l'utilise relativement (rires) Il ne prend pas en charge la fonction de sauvegarde ou la sortie, et il s'agit d'un substitut utilisé uniquement pour copier et coller la chaîne de caractères et déterminer le nombre de caractères maintenant. Je pense que ce sera plus pratique si diverses autres fonctions sont ajoutées. Merci d'avoir lu jusqu'ici.

6. Références

Si vous utilisez Tkinter, essayez d'utiliser PySimpleGUI J'ai touché à la bibliothèque d'interface graphique Python "PySimpleGUI" PySimpleGUI PySimpleGUI Cookbook Présentation de l'interface graphique My Boom PySimple Utilisation de base de l'interface graphique PySimple

Recommended Posts