Convertisseur de température

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Reprise du message précédent
Roland57 :
Ce n'est pas un projet Lazarus, mais un projet MSEide+MSEgui.
MSEide+MSEgui est bien mieux (à mon humble avis) que Lazarus, mais malheureusement il est moins connu.
artenaki :
Roland, comment puis-je compiler ton application ? Il n'y a pas de fichiers de projet Lazarus...
Ce n'est pas un projet Lazarus, mais un projet MSEide+MSEgui.
- MSEide+MSEgui (le projet original, par feu Martin Schreiber)
- MSEide+MSEgui (version mise à jour par Fred van Stappen)
MSEide+MSEgui est bien mieux (à mon humble avis) que Lazarus, mais malheureusement il est moins connu.
Mais ils ne sont pas dans Mageia ?
C'est grave ?
Yves

Roland57 Membre non connecté
-
- Voir le profil du membre Roland57
- Inscrit le : 08/02/2020
- Site internet
- Groupes :
Papoteur :
Mais ils ne sont pas dans Mageia ?
C'est grave ?
C'est grave ?
Je crois que MSEide+MSEgui était dans Mageia à une époque. Je ne sais pas pourquoi ça n'a pas été continué. Sans doute Martin Schreiber avait-il trop de choses à faire, étant donné qu'il était seul à travailler sur ce projet.
Maintenant est-ce que ça vaut le coup de refaire un rpm ? Oui, dans l'absolu ça vaudrait le coup. Je te propose d'en parler dans une nouvelle discussion que je commencerai un peu plus tard, disons dans la semaine.

Roland57 Membre non connecté
-
- Voir le profil du membre Roland57
- Inscrit le : 08/02/2020
- Site internet
- Groupes :
Script pour compiler le projet MSE Temperature Converter sans avoir à installer MSEide (mais bien sûr il faut quand même télécharger MSEgui, et installer Free Pascal) :
Code BASH :
## Script pour compiler le projet Temperature Converter ## Il faut d'abord télécharger MSEgui : ## https://github.com/mse-org/mseide-msegui lib=/home/roland/Applications/mseide/lib ## À modifier ! out=units ## Pour les fichiers .o et .ppu mkdir -p $out fpc -otempconv \ -Fu$lib/common/* \ -Fu$lib/common/kernel/linux \ -FU$out \ -Mobjfpc -Sh -O2 -XX -Xs -CX \ tempconv.pas
Code TEXT :
[roland@localhost temperatureconverter]$ sh build.sh Free Pascal Compiler version 3.2.0 [2020/07/05] for x86_64 Copyright (c) 1993-2020 by Florian Klaempfl and others Target OS: Linux for x86-64 Compiling tempconv.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/mseapplication.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msethread.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msestream.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msestat.pas Compiling /home/roland/Applications/mseide/lib/common/container/msedatalist.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/mseact.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/mseapplication.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msepipestream.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msestat.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msemacros.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msearrayprops.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msestatfile.pas Compiling /home/roland/Applications/mseide/lib/common/ifi/mseificomp.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msetimer.pas Compiling /home/roland/Applications/mseide/lib/common/ifi/mseificompglob.pas Compiling /home/roland/Applications/mseide/lib/common/kernel/msedatamodules.pas Linking tempconv 29092 lines compiled, 2.4 sec [roland@localhost temperatureconverter]$

marc-andré Membre non connecté
-
- Voir le profil du membre marc-andré
- Inscrit le : 29/09/2015
- Groupes :
dans les exemples de racket il y a ceci
il suffit d'installer drracket dans les dépôts pour l'essayer
et de faire un copié/collé;
(c'était dans les exemples sur mageia7, mais pas dans la 8, donc je l'ai récupéré dans les archives).
Code RACKET :
#! /usr/bin/env gracket #lang racket/gui ;; a bi-directional temperature converter (Fahrenheit vs Celsius) (define *C 0) (define *F 0) (define ((callback setter) field _evt) (define-values (field:num last) (string->number* (send field get-value))) (cond [(and field:num (rational? field:num)) (define inexact-n (* #i1.0 field:num)) (setter inexact-n) (render field inexact-n last)] [else (send field set-field-background (make-object color% "red"))])) (define (string->number* str) (define n (string->number str)) (values n (and n (string-ref str (- (string-length str) 1))))) (define-syntax-rule (flow *from --> *to to-field) (λ (x) (set!-values (*from *to) (values x (--> x))) (render to-field *to ""))) (define (render to-field *to last) (send to-field set-field-background (make-object color% "white")) (send to-field set-value (~a (~r *to #:precision 4) (if (eq? #\. last) "." "")))) (define celsius->fahrenheit (callback (flow *C (λ (c) (+ (* c 9/5) 32)) *F F-field))) (define fahrenheit->celsius (callback (flow *F (λ (f) (* (- f 32) 5/9)) *C C-field))) (define frame (new frame% [label "temperature converter"])) (define pane (new horizontal-pane% [parent frame])) (define (field v0 lbl cb) (new text-field% [parent pane][min-width 199][label lbl][init-value v0][callback cb])) (define C-field (field "0" "celsius:" celsius->fahrenheit)) (define F-field (field "0" " = fahrenheit:" fahrenheit->celsius)) (celsius->fahrenheit C-field 'start-me-up) (send frame show #t)
Édité par marc-andré Le 13/12/2022 à 17h21
HP ProDesk ;
Mageia8 Gnome
Liberté et sécurité sont les arguments classiques pour LINUX. En prime il y a aussi la dignité et la confiance ressentie depuis que je suis sous Mageia
Mageia8 Gnome
Liberté et sécurité sont les arguments classiques pour LINUX. En prime il y a aussi la dignité et la confiance ressentie depuis que je suis sous Mageia

Visiteur
Visiteur
J'ai dû expérimenter un peu et comprendre la logique, mais j'ai installé msegui et mseide et j'ai compilé ton application (tempconv) en utilisant mseide. Merci, ton application fonctionne, elle est rapide et facile à utiliser. Les bibliothèques système suivantes sont utilisées : libpthread.so.0, libdl.so.2, libX11.so.6, librt.so.1, libc.so.6.
https://github.com/mse-org/mseide-msegui/releases

Visiteur
Visiteur

Citation :
MSEgui is a complete independent Free Pascal widgetset. It does not use any other widgetsets like GTK2/GTK3/Qt4/Qt5. MSEgui interacts on Unix directly with X11 server (like other widgetsets do). On Windows, it deals with the low level Windows GDI interface.
MSEgui is like a GTK2/GTK3/Qt5 widgetset with same look-and-feel on each OS (Linux, Windows and FreeBSD). And because it is developed in Pascal, you have full control on the widgetset.
MSEgui is like a GTK2/GTK3/Qt5 widgetset with same look-and-feel on each OS (Linux, Windows and FreeBSD). And because it is developed in Pascal, you have full control on the widgetset.
DeepL :
MSEgui est un widgetset Free Pascal indépendant complet. Il n'utilise pas d'autres widgetsets comme GTK2/GTK3/Qt4/Qt5. MSEgui interagit sous Unix directement avec le serveur X11 (comme le font les autres widgetsets). Sous Windows, il traite avec l'interface Windows GDI de bas niveau.
MSEgui est comme un widgetset GTK2/GTK3/Qt5 avec le même look-and-feel sur chaque OS (Linux, Windows et FreeBSD). Et comme il est développé en Pascal, vous avez un contrôle total sur le widgetset.
MSEgui est comme un widgetset GTK2/GTK3/Qt5 avec le même look-and-feel sur chaque OS (Linux, Windows et FreeBSD). Et comme il est développé en Pascal, vous avez un contrôle total sur le widgetset.

Meuz Membre non connecté
-
- Voir le profil du membre Meuz
- Inscrit le : 06/08/2011
- Groupes :
Ma modeste contribution, en python et tkinter
Code PYTHON :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Import interface graphique from tkinter import * def celsius2farenheit(tcelsius): '''arrondi à 2 décimales''' return round(1.8*tcelsius + 32,2) def affiche_valeur(): saisi = saisie.get() if saisi != '': valsaisi = float(saisi) valeur.configure(text=celsius2farenheit(valsaisi)) else: valeur.configure(text='Rien') fen = Tk() fen.title("Conversion") fen.geometry('250x100') Label(fen, text='Valeur en °C').pack() # Saisie : champ texte saisie = Entry(fen, width=10) saisie.pack() Button(fen,text="Convertir en F", width=30,command=affiche_valeur).pack() valeur=Label(fen, text='') valeur.pack() fen.mainloop()
Ça faisait bien longtemps que je n'avais pas joué avec TKinter.
Edit : correction d'indentation.
Édité par Meuz Le 14/12/2022 à 17h45

Roland57 Membre non connecté
-
- Voir le profil du membre Roland57
- Inscrit le : 08/02/2020
- Site internet
- Groupes :
Bravo ! Excellente nouvelle.

@Meuz
Cool ton petit programme ! Ça a fonctionné chez moi sans que j'aie rien à installer. (J'ai dû supprimer le commentaire de la ligne 8, qui provoquait une erreur.)

Meuz Membre non connecté
-
- Voir le profil du membre Meuz
- Inscrit le : 06/08/2011
- Groupes :
Sinon j'ai surtout fait ceci pour m'amuser. J'ai particulièrement manqué d'inspiration pour le nom des variables.

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Yves

Meuz Membre non connecté
-
- Voir le profil du membre Meuz
- Inscrit le : 06/08/2011
- Groupes :
Merci Papoteur. Je rectifie le code.


Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Code PYTHON :
import sys from PyQt5.QtWidgets import QApplication, QPushButton, QLineEdit, QVBoxLayout, QHBoxLayout, QDialog, QLabel from PyQt5.QtCore import QCoreApplication class Dialog(QDialog): def __init__(self): super(Dialog,self).__init__() self.celsius = QLineEdit("", placeholderText="° C") self.farenheit = QLineEdit("", placeholderText="° F") self.celsius.editingFinished.connect(self.update_f) self.farenheit.editingFinished.connect(self.update_c) mainLayout = QVBoxLayout() titres = QHBoxLayout() titres.addWidget(QLabel("Celsius")) titres.addWidget(QLabel("Farenheit")) champs = QHBoxLayout() champs.addWidget(self.celsius) champs.addWidget(self.farenheit) mainLayout.addLayout(titres) mainLayout.addLayout(champs) self.setLayout(mainLayout) self.setWindowTitle("Convertisseur de température") self.show() def quit(self): QCoreApplication.exit() def update_f(self): self.farenheit.setText("%1.1f" % (float(self.celsius.text())*1.8 + 32)) def update_c(self): self.celsius.setText("%1.1f" % ((float(self.farenheit.text()) - 32)/1.8)) if __name__=='__main__': app=QApplication(sys.argv) dialog=Dialog() exit(app.exec_())
Édité par Papoteur Le 15/12/2022 à 13h49
Yves

Visiteur
Visiteur
Et merci à Meuz.

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
artenaki :
papoteur : Ca marche. Mais je dois appuyer sur Ctrl+Enter, sinon la fenêtre se ferme (avec Enter).
Et merci à Meuz.
Et merci à Meuz.
En effet, il reste cette imperfection.
L'appui sur Enter active le bouton Fermer.
Yves

Papoteur Membre non connecté
-
- Voir le profil du membre Papoteur
- Inscrit le : 03/10/2011
- Groupes :
-
Modérateur
-
Équipe Mageia
-
Administrateur
-
Forgeron
Papoteur :
En effet, il reste cette imperfection.
L'appui sur Enter active le bouton Fermer.
artenaki :
papoteur : Ca marche. Mais je dois appuyer sur Ctrl+Enter, sinon la fenêtre se ferme (avec Enter).
Et merci à Meuz.
Et merci à Meuz.
En effet, il reste cette imperfection.
L'appui sur Enter active le bouton Fermer.
Le plus simple est de supprimer le bouton "Fermer".
Pour cela, supprimer les trois lignes avec "quit_bt". (Fait dans le message qui présente le code).
Édité par Papoteur Le 14/12/2022 à 21h06
Yves

Roland57 Membre non connecté
-
- Voir le profil du membre Roland57
- Inscrit le : 08/02/2020
- Site internet
- Groupes :
Papoteur :
Et ma contribution en Qt5/Python
La classe !

Vous allez finir par me convaincre de me mettre à Python !
Je suis en train de me renseigner pour créer des fenêtres en Lua, qui est le langage interprété que je préfère.

Édité par Roland57 Le 15/12/2022 à 03h42
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie