« 1 (2) 3 4 »


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
ça marche

il fallait en effet renommer le script et les briques logique...

mais suivant le dossier impossible de tout voir ..
l'idéal serai peut-être de faire une sorte de système de " défilement " pour up et down


avec cette modification pas d'erreur mais la liste ne bouge pas ..

    def up(self):
        if not self.validated:
            self.index -= 1
            
        else:
            pos_y -= 0.2
                
   
    def down(self):
        if not self.validated:
            self.index += 1
            
        else:
            pos_y += 0.2




..j'imagine qu'il serai sûrement préférable de pouvoir récupérer le contenu du gestionnaire dans un objet texte


Merci beaucoup

Contribution le : 05/12/2016 07:05
Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
21/08/2013 19:12
De CH [+]
Post(s): 1558
C'était juste un petit test préliminaire pour montrer une base de travail, bien sûr qu'il faudrait implémenter du défilement ou des colonnes, etc...

Contribution le : 05/12/2016 10:56
_________________
BAddons, La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Développeur Blender quand j'en ai le temps...

Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
j'me disait bien ( ..trop simple )

par contre je suis pas sur d'avoir déjà vue/fait un système de colonne ou défilement


mais j'ai fais mes premiers repères --> .blend ( avec 3 objets texte )


le code

mport os

import bge
import bgl
import blf

#cont = bge.logic.getCurrentController()
sce = bge.logic.getCurrentScene()
#own = cont.owner

class FBrowser:
    def __init__(self, path):
        self.path = path
        self.index = 0
        self.validated = False
        
    def start(self, *args):
        sce = bge.logic.getCurrentScene()
        sce.post_draw.append(self.draw)
        
    """
    def stop(self, *args):
        #self.scene.post_draw.remove(self.draw)
        pass
    """
    
    def up(self):
        if not self.validated:
            self.index -= 1
            
        else:
            pos_y.index -= 0.2 # passe pas ..
                
    
    def down(self):
        if not self.validated:
            self.index += 1
            
        else:
            pos_y += 0.2 # passe pas ..
                
    
    def back(self):
        if not self.validated:
            self.path = os.path.dirname(self.path)
            self.index = 0
    
    def enter(self):
        subs = os.listdir(self.path)
        f = subs[self.index % len(subs)]
        self.path = os.path.join(self.path, f)
        if os.path.isdir(self.path):
            self.index = 0
        else:
            self.validated = True
    
        
    def draw(self, *args):
        text = sce.objects ["Text"]
        text02 = sce.objects ["Text.02"]
        text03 = sce.objects ["Text.03"]
        
        width = bge.render.getWindowWidth()
        height = bge.render.getWindowHeight()

        bgl.glMatrixMode(bgl.GL_PROJECTION)
        bgl.glLoadIdentity()
        bgl.gluOrtho2D(0, width, 0, height)
        bgl.glMatrixMode(bgl.GL_MODELVIEW)
        bgl.glLoadIdentity()

        blf.position(0, 0.05*width, 0.9*height, 0.0) # //dossier/
        #blf.size(0, 50, 72)
        #bgl.glColor4f(1.0, 1.0, 1.0, 0.5)
        if self.validated:
            blf.draw(0, "You selected: " + self.path)
                        
        else:
            subs = os.listdir(self.path)
            text["Text"] = str(len(subs)) # affiche le nombre de fichiers
            text02["Text"] = str(self.index % len(subs)) # affiche le numéro du fchier
            text03["Text"] = str(self.path) # affiche le dossier
            
            #blf.draw(0, self.path)         # ...?
            pos_y = 0.90 # /dossier/(posX)sousdossier
            
            
            for i, sub in enumerate(subs):
                pos_y -= 0.02
                blf.position(0, 0.1*width, pos_y*height, 0.0) # //dossier/(posX)sousdossier/
                blf.draw(
                    0, 
                    (" >  " if i == (self.index % len(subs)) else " "*4) + sub.encode(
                        "utf-8", "ignore").decode("utf-8"))

    
fb = FBrowser(os.getcwd())



start = fb.start


def verifyPush(name, fct):
    def fc():
        cont = bge.logic.getCurrentController()
        if cont.sensors[name].positive:
            fct()
    return fc

up = verifyPush("Up", fb.up)
down = verifyPush("Down", fb.down)
back = verifyPush("Back", fb.back)
enter = verifyPush("Enter", fb.enter)


J'ai que les numéraux des dossiers mais il me manque encore le nom du " dossier ciblé " (avec " > ")

en revanche j'ai le nom du " dossier principal "
une idée , info svp ?

Merci Matpi

Contribution le : 05/12/2016 12:31
Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
Bonne nouvelle voici tout les lignes de commandes que j'ai réunis sur os
( plus exactement ce que j'en ai compris )

certaine ligne sont en commentaire (#) pour éviter par exemple la création et la suppression de fichiers ..mais tout marche..

import os
import bge

sce = bge.logic.getCurrentScene()


mouse = bge.logic.mouse
keyboard = bge.logic.keyboard

mouPos = mouse.position

pulse = bge.logic.KX_INPUT_JUST_ACTIVATED
actif = bge.logic.KX_INPUT_ACTIVE 

Click_L = mouse.events[bge.events.LEFTMOUSE]
    
Ctrl_L = keyboard.events[bge.events.LEFTCTRLKEY]
A = keyboard.events[bge.events.AKEY]  # UP
Z = keyboard.events[bge.events.ZKEY]  # DOWN
E = keyboard.events[bge.events.EKEY]  # ENTER
R = keyboard.events[bge.events.RKEY]  # BACK
T = keyboard.events[bge.events.TKEY]
Y = keyboard.events[bge.events.YKEY]

from datetime import datetime  # (pour les lignes 37 et 38)

text = sce.objects ["Text"]
text00 = sce.objects ["Text.00"]
text02 = sce.objects ["Text.02"]
text03 = sce.objects ["Text.03"]
text04 = sce.objects ["Text.04"]
text05 = sce.objects ["Text.05"]
text06 = sce.objects ["Text.06"]
text07 = sce.objects ["Text.07"]
text08 = sce.objects ["Text.08"]
text09 = sce.objects ["Text.09"]
text10 = sce.objects ["Text.10"]
text11 = sce.objects ["Text.11"]

#print(dir(os))                                           # os complet .

text00["Text"] = str("Hello Word")                        # simple texte 

text["Text"] = str(os.getcwd()) #  /home/user .

text02["Text"] = str(os.chdir('/home/user/'))             #  Détermine le chemin (affiche none) puis ...
text03["Text"] = str(os.listdir())                        #  Donne la liste .
#os.mkdir('Dossier')                                       #  Créer un Dossier 
#os.makedirs('Dossier/SousDossier')                        #  Créer un Dossier + un SousDossier

#os.mkdir('Dossier/SousDossier')                           #  Créer un SousDossier SI " /Dossier " existe  ( sinon mettre  os.mkdir('Dossier') juste avant quand  le "Dossier" manque )
                                                           

#os.rmdir('Dossier')                                       #  Supprime un Dossier 
#os.removedirs('Dossier/SousDossier')                      #  Supprime un Dossier + un SousDossier


#os.rename('img.jpg', 'img_modif.jpg')                     #  Changer un nom de fichier


text04["Text"] = str(os.stat('img.jpg'))                  #  Affiche toutes les statistique d'un fichier
text05["Text"] = str(os.stat('img.jpg').st_mtime)         #  Affiche ""la statistique de la dernière modif"" (fonctionne avec toutes les stat)

mod_time = os.stat('img.jpg').st_mtime
text06["Text"] = str(datetime.fromtimestamp(mod_time))    #  Affiche ( ..en claire ) la date de la dernière modif

#for dirpath, dirnames, filenames in os.walk('/home/user/Desktop'):   #   ( donne tout les chemins , dossiers , fichiers ) 
    #print('Current Path:', dirpath)                 # str non suporté..  ( chemin )
    #print('Directories:', dirnames)                 # str non suporté..  ( dossier )
    #print('Files:', filenames)                      # str non suporté..  ( fichiers )
    #print()                                         # str non suporté..  ( saute une ligne )
    
    
#path = bge.logic.expandPath("//")
#text07["Text"] = str(path)

#text08["Text"] = str(os.environ.get('HOME'))        #  Affiche /home/user
#  ou  ( avec path1 = )
#path1 = os.environ.get('HOME')
#text08["Text"] = str(path1)                         #  Affiche /home/user                           
#  ou
#text08["Text"] = str(path1 + 'fileTest.txt')        #  Afiiche /home/userfileTest.txt ( sans créer le fichier ) 


#path1 = os.path.join(os.environ.get('HOME'), 'fileTest.txt')    #  Créer un nom de fichier
#print(path1)

#with open(path1, "w") as f:
#    f.write                                                     #  Créer le fichier


#text08["Text"] = str(os.path.basename('/home/user/Desktop/fileTest.txt'))    #  Créer UN NOM de fichier
#text08["Text"] = str(os.path.split('/home/user/Desktop/fileTest.txt'))       #  Affiche le dossier + Créer UN NOM de fichier
#text08["Text"] = str(os.path.dirname('/home/user/Desktop/'))                 #  Affiche le dossier 
#text08["Text"] = str(os.path.exists('/home/user/Desktop/fileTest.txt'))      #  Vérifier que le nom de fichier existe ( renvoi True ou False )
#text08["Text"] = str(os.path.isfile('/home/user/Desktop/fileTest.txt'))      #     "      "   "  "   "   "       " 
#text08["Text"] = str(os.path.splitext('/home/user/Desktop/fileTest.txt'))    #  Affiche le dossier + le nom du fichier et donne l'extension séparément

#text09["Text"] = str(dir(os.path))              # lister ( horizontalement )  dirname , getsize , isdir , isfile , islink , join ...


#vary = input("Entre ton nom : ")                 # Dans le terminal
#text10["Text"] = str("Salut " + vary)            # Écrit " Salut + ton nom "
#text11["Text"] = str(vary)                       # Ton nom



mais je me pose une nouvelle question .. est-il possible de ne pas utiliser TKINTER ?
( pour faire un " scrollbar " )

Merci

Contribution le : 08/12/2016 15:41
Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
21/08/2013 19:12
De CH [+]
Post(s): 1558
Une scrollbar... oui ça devrait être possible de bidouiller qqch.

Après, si t'as besoin de bcp de fonctionnalités supplémentaires, il faudra tôt ou tard passer à un vrai système de GUI. (Mais alors le problème c'est de rendre le truc portable, notamment.)

Contribution le : 08/12/2016 21:36
_________________
BAddons, La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Développeur Blender quand j'en ai le temps...

Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
Merci Matpi

j'ai commencé un script avec Tkinter (
 
import bge
from tkinter import *
#import os

cont = bge.logic.getCurrentController()
sce = bge.logic.getCurrentScene()
own = cont.owner

bge.logic.globalDict['Pr1'] = 0
bge.logic.globalDict['Pr2'] = 0
bge.logic.globalDict['Pr3'] = 0
bge.logic.globalDict['Pr4'] = 0

def changC1():
    pr1 = bge.logic.globalDict['Pr1']
    bge.logic.globalDict['Pr1'] += 1
    
    if pr1 == 0:
        print(' 1 (butt_n1 = 1)')
        #...
        
    if pr1 >= 1:
        print(' 0 (butt_n1 = 0)')
        bge.logic.globalDict['Pr1'] = 0
        #...
        
    return

def changC2():
    pr2 = bge.logic.globalDict['Pr2']
    bge.logic.globalDict['Pr2'] += 1
    
    if pr2 == 0:
        print(' butt_n2 = 1 ')
        lab1.grid(padx=0, pady=50)
        lab1.config(bg = "#BBBBBB", fg = "#FFF", anchor="nw")
        f1_butt2.config(image=img1, bg = "#BBBBBB", fg = "#FFF")
        
    if pr2 >= 1:
        print(' butt_n2 = 0 ')
        bge.logic.globalDict['Pr2'] = 0
        lab1.grid(padx=0, pady=0)
        lab1.config(bg = "#AAAAAA", fg = "#FFF", anchor="w")
        f1_butt2.config(image=img2, bg = "#AAAAAA", fg = "#FFF")

    return

def changC3():
    pr3 = bge.logic.globalDict['Pr3']
    bge.logic.globalDict['Pr3'] += 1
    
    if pr3 == 0:
        print(' butt_n3 = 1 ')
        lab2.config(bg = "#BBBBBB", fg = "#FFF")
        
    if pr3 >= 1:
        print(' butt_n3 = 0 ')
        bge.logic.globalDict['Pr3'] = 0
        lab2.config(bg = "#AAAAAA", fg = "#FFF")
        
    return

def changC4():
    pr4 = bge.logic.globalDict['Pr4']
    bge.logic.globalDict['Pr4'] += 1
    
    if pr4 == 0:
        print(' butt_n4 = 1 ')
        lab2.config(bg = "#BBBBBB", fg = "#FFF")
        
    if pr4 >= 1:
        print(' butt_n4 = 0 ')
        bge.logic.globalDict['Pr4'] = 0
        lab2.config(bg = "#AAAAAA", fg = "#FFF")
        
    return

root = Tk()

img1 = PhotoImage(file="/home/ubun/Pictures/tof1.png")
img2 = PhotoImage(file="/home/ubun/Pictures/tof2.png")

frame1 = Frame(root, bg="#ABCDEF")

lab1 = Label(frame1, anchor="w", text="Sauvegarder", font="Arial 12 bold", width=25, height=1)
lab1.grid(row=0, column=0, padx=0, pady=0)

ent1 = Entry(root, width=20)

f1_butt1 = Button(frame1, image=img1, text="button 1", command=changC1)
f1_butt1.grid(row=0, column=2)
f1_butt2 = Button(frame1, image=img2, text="button 2", command=changC2)
f1_butt2.grid(row=0, column=3)

frame1.grid(row=0, column=2)

ent1.grid(row=1, column=2, padx=2)


frame2 = Frame(root, bg="#FEDCBA")
lab2 = Label(frame2, anchor="nw", text="Ouvrir", font="Arial 10 bold", width=25, height=1) #anchor=nordest

f2_butt1 = Button(frame2, image=img1, text="button 1", command=changC3)
f2_butt2 = Button(frame2, image=img2, text="button 2", command=changC4)

frame2.grid(row=2, column=4)

f2_butt1.pack(side=LEFT, fill=Y)
f2_butt2.pack(side=LEFT, fill=Y)


root.mainloop()


tof1

tof2




mais J'ai toujours la même question avec ton .blend Matpi


    def draw(self, *args):
        text = sce.objects ["Text"]
        text02 = sce.objects ["Text.02"]
        text03 = sce.objects ["Text.03"]

        #....

        if self.validated:
            blf.draw(0, "You selected: " + self.path)
                        
        else:
            subs = os.listdir(self.path)
            text["Text"] = str(len(subs))                # affiche le nombre de fichiers
            text02["Text"] = str(self.index % len(subs)) # affiche le numéro du fchier
            text03["Text"] = str(self.path)              # affiche path ( /home/user )
    



je peux donc voir le numéro du fichier énuméré mais pas son nom ... ( j'ai fais des tentatives avec " str(os.path.dirname) " .. .mais je ne parviens pas à avoir le nom du dossier qui correspond à text02["Text"] )

une idée svp

Contribution le : 14/12/2016 03:41
Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
21/08/2013 19:12
De CH [+]
Post(s): 1558
As-tu réussi à utiliser Tkinter à l'intérieur du BGE?

Concernant ta question, pas sûr de comprendre ton problème...

subs = os.listdir(self.path) # liste des noms des fichiers dans le dossier self.path
text["Text"] = str(len(subs)) # nombre de fichiers dans le dossier self.path
text02["Text"] = str(self.index % len(subs)) # index du fichier sélectionné dans le dossier self.path
text03["Text"] = self.path # chemin du dossier courant


Est-ce:

subs[self.index % len(subs)] # nom du fichier sélectionné


que tu veux?

Contribution le : 14/12/2016 10:47
_________________
BAddons, La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Développeur Blender quand j'en ai le temps...

Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
Citation :
As-tu réussi à utiliser Tkinter à l'intérieur du BGE?


..à l'intérieur du Bge non
..mais avec oui ( 1er script du post #16 ) quand je lance le Bge, Tkinter apparais dans une nouvelle fenêtre


Citation :

Est-ce:
subs[self.index % len(subs)] # nom du fichier sélectionné
que tu veux?


Oui Merci Matpi , je pense faire en sorte de ne probablement pas utiliser Tkinter pour ce programme,
l'affichage des informations étant destiné à des objets ["text"] à l’intérieur du Bge

j'ai aussi découvert par la même occasion une autre possibilité avec Tkinter et asksaveasfilename

from tkinter import *
from tkinter import filedialog as fd

root = Tk()
open_file = fd.askopenfilename()
save_file = fd.asksaveasfilename()
root.mainloop()


qui semble très pratique les fenêtres sont près configuré ( et modifiable , mais graphiquement j'suis vraiment pas convaincu.. )

Merci Beaucoup pour ton Aide Matpi

Contribution le : 14/12/2016 18:51
Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
21/08/2013 19:12
De CH [+]
Post(s): 1558
Citation :


..à l'intérieur du Bge non
..mais avec oui ( 1er script du post #16 ) quand je lance le Bge, Tkinter apparais dans une nouvelle fenêtre


C'est ça que je voulais dire. Et comment as-tu configuré ton truc pour que la lib tkinter soit reconnue par le Python de Blender? (ou utilises-tu Python en system-wide?)

Contribution le : 14/12/2016 21:03
_________________
BAddons, La Collection d'Addons de Matpi: https://github.com/qwenger/BAddons
Développeur Blender quand j'en ai le temps...

Créer un fichier PDF de la contribution Imprimer


Re: Python dans le Bge et Linux
OverdOzed
Inscrit:
02/02/2013 05:34
Post(s): 351
j'ai rien fait de particulier ...
( il me semble avoir installé SPE ( Stani's Python Editor ) que je n'utilise finalement pas ( j'ai adopté "Brackets" ) mais Tkinter lui était déjà installé il me semble ( Ubuntu 16.04 )

Contribution le : 14/12/2016 21:13
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
« 1 (2) 3 4 »




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses [non résolu] Problème IK : pied qui tourne au lieu d'être fixé au sol 4 64 Hier 18:09:00
mly 
Questions & Réponses appliquer une animation NLA 1 23 Hier 16:16:13
prometheusx 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS horreur - Date de sortie 1er juillet 2020    [1][2][3]...[51] 504 87083 Hier 13:08:43
Hook 
Questions & Réponses affichage progressif bevel de courbe 5 109 Hier 10:25:23
jlf 
The Blender Clan 'tchat Free addon Modélisation procédurale par nodes 1 54 Hier 08:47:52
WinZs 
[WIP] et travaux terminés [WIP] Alpaga in love 7 166 Hier 00:20:08
Bibi09 
Questions & Réponses Problème de rendu (débutant) 1 53 30/05 16:16:59
Rimpotche 
Questions & Réponses Grosse différence d'éclairage sur le rendu final VS le mode Rendered 9 153 29/05 21:42:20
Crocodile_13 
Questions & Réponses Problème avec le nodes Color Ramp 5 182 29/05 20:59:01
JaAlVir657 
Python & Plugins Comment renommer "Key" ? (le chef des shapekeys)    [1][2] 18 475 29/05 19:06:29
lucky 
Questions & Réponses [résolu] théorie lowpoly / highpoly 3 74 29/05 17:53:57
moonboots 
Moteur de jeu GameBlender et alternatives hARMful engine    [1][2][3]...[7] 65 6339 29/05 16:40:53
Bibi09 
[WIP] et travaux terminés Les fonds de mes rendus 4 158 29/05 14:05:18
Crocodile_13 
Python & Plugins [résolu] obtenir un résultat fixe suite au déplacement souris 1 108 28/05 14:28:07
Bibi09 
Moteurs de rendu rendu Povray sous Blender 2.6 + trace de log 7 12118 28/05 00:25:30
MauriceRaybaud 
Questions & Réponses [non résolu] Personnage et CAT5 - VRCHAT 0 84 27/05 22:31:10
Muffet 
Questions & Réponses Conseils pour modéliser un corps 4 186 27/05 17:48:43
moonboots 
Questions & Réponses Comment dupliquer une face autour d'un axe? 1 88 26/05 19:05:12
moonboots 
Questions & Réponses Comment faire une boucle infinie (animation) 9 182 26/05 13:00:46
3dlone 
Moteur de jeu GameBlender et alternatives [WIP] Jeu "Iron Man Collapsing"    [1][2][3] 27 8875 26/05 01:39:39
Bibi09 

Qui est en ligne
48 utilisateur(s) en ligne (dont 23 sur Forums)

Membre(s): 0
Invité(s): 48


plus...
Nouveaux membres
SaundraArr 1/6/2020
VinceSynde 1/6/2020
CharissaWa 31/5/2020
LavonZerch 31/5/2020
Marjorie95 31/5/2020
PERMAFROST 31/5/2020
Samux 30/5/2020
titisteph 29/5/2020
Muffet 27/5/2020
MadK 26/5/2020
Dernier Ajout
mirages-preview~0.jpg

Evènements à venir
Jui 30
Anniv des Jedi :-D
Jui 11
BUG de Lyon
Jui 23
Anniv du BlenderClan !
plus 270 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2020 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445