Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Търся човек с познания по Питон

Featured Replies

да ми помогне с едни кодове Моля пишете в темата

  • Автор

Не ми трябва да ми пише проект а само да обясни нещо айде ще го пиша в темата и ще  я ползвам за обяснения и питане та на въпроса:

process =  subprocess.Popen(['ls /home/$USER'],stdout=subprocess.PIPE,shell=True)
stdout, stderr = process.communicate()

Този Питон код печата съдържанието на домашния каталог като ползва променливата $USER на средата  BASH... Когата се изведе резултата директно в конзолата (терминала) с 

print stdout

всичко е наред но аз искам да изведа резултата в Listbox и тука вече удрям гредата не  извежда коректно резултата та въпроса е как се извежда резултат от която и да е команда в Listbox? С os.listdir() и обход става идеално но аз искам да е по този начин

преди 3 часа, petie1 написа:

как се извежда резултат от която и да е команда в Listbox? 

Например така какво ще излезе ?

# !/usr/bin/python3
from tkinter import *
from tkinter import messagebox
import tkinter
import subprocess

process =  subprocess.Popen(['ls /home/$USER'], stdout=subprocess.PIPE, shell=True)
stdout, stderr = process.communicate()

print(stdout)
print(type(stdout))

decoded_stdout = stdout.decode("utf-8")
print(type(decoded_stdout))

top = Tk()

Lb1 = Listbox(top)
Lb1.insert(1, "Test")
Lb1.insert(2, decoded_stdout)
Lb1.pack()
top.mainloop()

 

 

  • Автор

ха стига бе верно ли така се добавя?:shock11:

не става пак има някакви странни символи между папките

 

ето моя код

root = Tk()

frm = Frame(root)

frm.pack()

ll = Listbox(frm, height = 100, width = 100 , bg ="white")
ll.pack(side = TOP)

process =  subprocess.Popen(['ls /home/$USER'],stdout=subprocess.PIPE,shell=True)
stdout, stderr = process.communicate()
decolde = stdout.decode("utf-8")

ll.insert(END,decolde)

трябва да стане като с

path=os.listdir("/home/$USER")

for files in path:
ll.insert(END,files)

 

В моята система не виждам някакви проблеми като изпълня това:


#!/usr/bin/python2
from Tkinter import Tk
from Tkinter import *
import subprocess
import locale

process = subprocess.Popen(['ls /home/$USER'], stdout=subprocess.PIPE, shell=True)

stdout, stderr = process.communicate()

encoding = locale.getpreferredencoding()
lines = stdout.decode(encoding).splitlines()

top = Tk()
Lb1 = Listbox(top, height = 100, width = 100)

for files in lines:
    Lb1.insert(END, files)

Lb1.pack()
top.mainloop()
 

 

listboxtest.png.498ea1d5cc4fd84521fd5150645724bc.png

  • Автор

Ще го тествам и ще пиша явно нещо от локала на Дебиан 8 е

И при мен работи последното

Ето още един пример с python3

# !/usr/bin/env python3
from tkinter import *
from subprocess import check_output
from locale import getpreferredencoding

enc = getpreferredencoding()
out = check_output('ls /home/$USER', shell=True).decode(enc).splitlines()

top = Tk()

Lb1 = Listbox(top)
for line in out:
    Lb1.insert(0, line)

Lb1.pack()
top.mainloop()

Между другото има променлива $HOME и може да се използва вместо /home/$USER

Редактирано от Гост
decoding (преглед на промените)

  • Автор

Стана значи е било от декодирането хм никъде не пише такива неща за Listbox

Пак ще пиша ако забия

  • 2 седмици по-късно...
  • Автор

Ето че пак забих ..... Сега пък как се връща в предишен каталог? Вградените функции не вършат работа щот вадят каталога където е скрипта

Ето кода

def back_dir(sel):
    
    sel = ll.get(ll.curselection())
    p = subprocess.Popen(["cd /home/$USER/"+str(sel)+" && cd .."+ "&& ls"],stdout = subprocess.PIPE,shell = True)
    stdout , stderr = p.communicate()
    encode = locale.getpreferredencoding()
    lines = stdout.decode(encode).splitlines()
    
    ta=os.getcwdu()
    ll.delete(0,END)
    ll.insert(0,"/")
    
    for files in lines:
        print files

 

Не мога да придобия представа от една функция само какво се опитваш да направиш,
обаче в края изтрива списъка и показва наклонена черта на негово място.

Цикъла след това трябва да го направиш да вкара списък с новите файлове.

for files in lines:
	ll.insert(0, files)

Но все пак не виждам каква е целта.

Може би ще е по-добре да обхождаш директориите с вградени методи като  os.getcwdu() или os.listdir() или os.chdir(), а не с шел команди.

  • Автор
преди 12 часа, Пилешки мечти написа:

Не мога да придобия представа от една функция само какво се опитваш да направиш,
обаче в края изтрива списъка и показва наклонена черта на негово място.

Цикъла след това трябва да го направиш да вкара списък с новите файлове.


for files in lines:
	ll.insert(0, files)

Но все пак не виждам каква е целта.

Може би ще е по-добре да обхождаш директориите с вградени методи като  os.getcwdu() или os.listdir() или os.chdir(), а не с шел команди.

Опитвам се да направя нещо като фтп клиент до сега съм стигнал до листването на файлове от локалната машина а сега се мъча да се връща обратно разбираш ли

А ако ти пратя целия питон скрипт

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from Tkinter import *
import os

# Смени директорията
def change(event):
    s = listbox.get(listbox.curselection())
    # Премахни или добави папки към home списъка
    if s == '/':
        home.pop()
    else:
        home.append(s)
    # Направи списъка home валиден път
    full_path = '/'.join(home[0:])
    # Изтрий показаните папки от предишната директория
    listbox.delete(0, END)
    # Не показвай черта за връщане, ако си в началната директория
    if len(home) > 1:
        listbox.insert(0, '/')
    # Покажи имената от новия път
    for dir in os.listdir(full_path):
        listbox.insert(END, dir)

master = Tk()

listbox = Listbox(master)

# Списък, към ккойто ще се добавят и вадят имена на папки
home = [os.getenv('HOME')]

for dir in os.listdir(home[0]):
    listbox.insert(END, dir)

listbox.bind("<Double-Button-1>", change)
listbox.pack()

mainloop()

Ето как бих го направил аз. Това навигира назад-напред в папките от домашната директория.

Създава един списък, към който добавя имената на файловете при двоен клик върху тях. А като кликнеш върху наклонената черта, те връща едно ниво назад.

  • Автор
преди 6 минути, Пилешки мечти написа:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from Tkinter import *
import os

# Смени директорията
def change(event):
    s = listbox.get(listbox.curselection())
    # Премахни или добави папки към home списъка
    if s == '/':
        home.pop()
    else:
        home.append(s)
    # Направи списъка home валиден път
    full_path = '/'.join(home[0:])
    # Изтрий показаните папки от предишната директория
    listbox.delete(0, END)
    # Не показвай черта за връщане, ако си в началната директория
    if len(home) > 1:
        listbox.insert(0, '/')
    # Покажи имената от новия път
    for dir in os.listdir(full_path):
        listbox.insert(END, dir)

master = Tk()

listbox = Listbox(master)

# Списък, към ккойто ще се добавят и вадят имена на папки
home = [os.getenv('HOME')]

for dir in os.listdir(home[0]):
    listbox.insert(END, dir)

listbox.bind("<Double-Button-1>", change)
listbox.pack()

mainloop()

Ето как бих го направил аз. Това навигира назад-напред в папките от домашната директория.

Създава един списък, към който добавя имената на файловете при двоен клик върху тях. А като кликнеш върху наклонената черта, те връща едно ниво назад.

Ето това е значи не става  с баш така ли? Утре ще ти пратя моя Питон файл , аз повечето работи сам си писах

преди 1 минута, petie1 написа:

Ето това е значи не става става с баш така ли?

Сигурен съм че може и с шел команди, но не се сещам за лесен начин.

  • Автор
преди 3 минути, Пилешки мечти написа:

Сигурен съм че може и с шел команди, но не се сещам за лесен начин.

Като го видиш не ми се смей много де

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.