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

-

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



Virtuos86


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

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

#41

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

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

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

dimy44


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

HTC One S

Евпатория

Возраст - 53

#42

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

iBiZoNiX


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

#43

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


def scan(self, path='C://'):
if not os.path.exists(path):
return 'path not exists'
else:
files = os.listdir(path)
if files == []:
self.empty_folders.append(path)
else:
for file in files:
if os.path.isfile(path+file):
self.db_files.append(file)
elif os.path.isdir(path+file):
self.db_folders.append(file)
self.scan(path+file+'/')
return 'System scaning complet'

Andre-4667


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

#44

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


import os

files, folders, other_folders=[], [], []

def skan(path='C:\\'):
global files, folders, other_folders
for i in os.listdir(path):
if os.path.isdir(path+i):
folders+=[path+i+'\\']
other_folders+=[path+i+'\\']
else:
files+=[path+i]
if other_folders!=[]:
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

Евпатория

Возраст - 53

#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

Евпатория

Возраст - 53

#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

Евпатория

Возраст - 53

#50

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


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