Ноу хау - от мастеров на заметку » Страница 5

-

Программирование на Python



Virtuos86


репутация: 101
на сайте с 2008 года
сообщений: 802

где-то в России

#41

Можно, конечно, и этим способом сделать, там только константу другую указать нужно.
Но вообще предусмотрена стандартная возможность для этого, описанная в доке к модулю:

1from appuifw2 import query
2query(u'', 'query', ok=u' ', cancel=u'-')

Хм, сейчас посмотрел в коде appuifw2.py - оно там так и сделано. Только лучше, чем в моём варианте. Так что лучше оттуда взять имплементацию.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#42

Во блин,не знал этого...

iBiZoNiX


репутация:
на сайте с 1970 года
сообщений:

#43

Рекурсия по папкам
(вырезал из своего класса)

1def scan(self, path='C://'):
2    if not os.path.exists(path):
3        return 'path not exists'
4    else:
5        files = os.listdir(path)
6        if files == []:
7            self.empty_folders.append(path)
8        else:
9            for file in files:
10                if os.path.isfile(path+file):
11                    self.db_files.append(file)
12                elif os.path.isdir(path+file):
13                    self.db_folders.append(file)
14                    self.scan(path+file+'/')
15    return 'System scaning complet'

Andre-4667


репутация:
на сайте с 1970 года
сообщений:

#44

А не легче ли будет так?

1import os
2 
3files, folders, other_folders=[], [], []
4 
5def skan(path='C:\\'):
6    global files, folders, other_folders
7    for i in os.listdir(path):
8        if os.path.isdir(path+i):
9            folders+=[path+i+'\\']
10            other_folders+=[path+i+'\\']
11        else:
12            files+=[path+i]
13    if other_folders!=[]:
14        skan(other_folders.pop())

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#45

Даешь короткий код! =)
import cfileman
os2 = cfileman.FileMan()
def scan(dir):
. . _res = os2.listdir(dir)
. . return [j for i in _res[0] for j in scan(dir + i + u'\\')] + [dir + f for f in _res[1]]

scan(u'c:')
-------------
добавлено в 13.41: Переводим цвета из вида 0xffffff в (255, 255, 255) и обратно

rgb2hex = lambda x: hex((x[0] << 16) + (x[1] << 8) + x[2])

hex2rgb = lambda x: (x >> 16 & 255, x >> 8 & 255, x & 255)

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#46

Хочу рассказать об одной запаре, которая со мной произошла. Все знают эту функцию: def ru(txt): return txt.decode('utf-8'). И вот я написал типа self.img.text((5, 158), ru('блабла: %s') %text, 0, 'annotation'). И ведь зараза: из консоли работает, а как самостоятельное приложение- нет! Минут 15 я искал, че за фигня. Не надо было %text выносить за пределы функции. Надо так: ru('блабла: %s' %text).
З.Ы. Можно смеяться)

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#47

У тебя наверное переменная text была не в юникоде? Отсюда более полезный совет - не производите операции с группой строк, если последние приведены к разным типам переменных.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#48

Думаю, многие с таким встречались.
Вот код, моделирующий проблему:

from graphics import Image

import appuifw2 as aw

canvas = aw.Canvas()

list = [u'Item1', u'Item2']

def func_listbox():

. . . . aw.note(u'funclb')

def listbox():

. . . . def current():

. . . . . . . . func_listbox()

. . . . aw.app.body = aw.Listbox(list, current)

def canv():

. . . . aw.app.body = canvas

. . . . canvas.bind(63557, listbox)

canv()

lock = aw.e32.Ao_lock()

aw.app.exit_key_handler = lock.signal

lock.wait()

при нажатии по центру вызывается функция def listbox(), телом становится aw.Listbox(..). Но вот запара: тут же следом вызывается и функция func_listbox(), как-будто еще раз нажали по-центру уже в листбоксе. Выход:
1. Убрать из аргументов, передаваемых классу Listbox, вызываемую функцию;
2. Забиндить клавишу по-центру на эту функцию.
Вот как будет выглядеть функция listbox:
def listbox():

. . . . def current():

. . . . . . . . func_listbox()

. . . . aw.app.body = lb = aw.Listbox(list)
. . . . lb.bind(63557, current)
#The end =)
-------------
добавлено в 21.26: graphics не нужен здесь конечно =). Прицепился, зараза, при копировании импортов =D

JOIN_ME


репутация:
на сайте с 1970 года
сообщений:

#49

Скорее всего в листбокс передается не НАжатие, а ОТжатие джойстика. Лучше определить event_callback в канвасе вместо бинда, тогда все будет аккуратнее.

dimy44


репутация: 537
на сайте с 2006 года
сообщений: 2540

HTC One S

Евпатория

Возраст - 54

#50

В свое время пробовал через эвент, тоже неполучилось, хотя срабатываний меньше, но есть... Хз, че там


Яндекс.Метрика