Tkinter ile Port açma programı denemesi ... [YARDIM]

Başlatan umtylmzz, 18 Ekim 2017 - 15:14:37

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

umtylmzz

Arkadaşlar Merhaba,

Pythona bir anda merak saldım özel bir şirkette Sistem uzm.yrd. olarak görevliyim Pythonda yapmak istediğim şey port açmak aslında karmaşık gibi geliyor ancak mantığını en asgariye düşürdüm öyle bir prog yazmalıyım ki o program iptables a gidip misal 10. satıra  -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport Buraya kullanıcının textbox a girdiği değer yazılsın -j ACCEPT ve dosyayı kaydedip çıksın istiyorum. Ancak ne yazık ki yapamadım . Kod bilgisi aşağıda mevcuttur. Lütfen yardım ediniz.

from Tkinter import *

pencere = Tk()
pencere.geometry("200x120")

giris = Entry()
giris.pack()

def fonksiyon():
     with open("/home/umtylmz/Desktop/deneme.txt","r +"
           data = dosya.readlines()
           data.insert(1,giris)
           dosya.seek(0)
           dosya.writelines(data)

onay = Button(pencere)
onay.config(text= "port aç", command = fonksiyon)
onay.pack()

pencere.mainloop()

.py

değişiklik yapmak istedeiğin metnin ön izlemesini paylaşırmısın..

umtylmzz

[mention=632055]@.py[/mention] Dosyanın içinde alt alta sırası ile
u
u
u
u
u
u

yazmaktadır deneme amaçlı

.py

Eğer sorunuzu yanlış anlamadıysam sorunuzun çözümü:


# -*- coding: utf-8 -*-
#!/usr/bin/env python
try:
    import urllib.request as url
except ImportError:
    import urllib
ref = '-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport'
file = '/home/linuxmt/Python/PORT/port'
def test(textbox, replace=1):
    source = urllib.urlopen(file).readlines()
    string = ''
    for enum, line in enumerate(source, 1):
        string = string + str(line)
        if line.find(ref) != -1 and replace is 1 :
            string = string.replace(line, textbox+'\n')
    with open(file, "w") as port: port.write(string)
    return string
print test('textbox',1)


umtylmzz

[mention=632057]@.py[/mention] Tekrar Anlatayım, Deneme.txt diye bir belgem var varsayalımki içinde
1.satır
2.satır
3.satır
4.satır
5.satır
.
.
.
diyelimki böyle bir veri yapısı mevcut. Kullanıcı textboxa girdiği sayı değerini butona tıkladığında 3.satır ile 4.satır arasına yazdırıp kaydedip çıksın hepsi bukadar.

Teşekkür ederim.

.py

Metin dosyasında referans alacağımız bir girdi varmı şunu demek istiyorum var olan birşeyi değiştirmek mi istiyorsunuz yoksa bir referans olmadan mesela 3 satırın altına textboxtan gelen değeri mi yazdırmak mı istiyorsunuz..
anladığım kadarıyla textboxtan gelen değeri direk 3.satırın altında boş satır oluşturup yazdırmak..

umtylmzz

[mention=632059]@.py[/mention] içindeki veri girdisini ben yazdım text belgesinide ben oluşturdum kod'da göreceğiniz gibi deneme ismin de bir belge içinde bilgi girdisinide
1.satır
2.satır
3.satır
4.satır
5.satır
6.satır
7.satır

olarak ayarladım ben istiyorumki textboxdan girilen değer butona tıklandığında 3.satırın altına yazılsın örneğin,
kişi textboxa 3,5 girdi diyelim,

1.satır
2.satır
3.satır
3,5 satır
4.satır
5.satır
6.satır
7.satır

dosyadaki değişiklik bu şekilde olacaktır.

.py


# -*- coding: utf-8 -*-
#!/usr/bin/env python
try:
    import urllib.request as url
except ImportError:
    import urllib
from Tkinter import *

file = '/home/linuxmt/Python/PORT/port'

pencere = Tk()
pencere.geometry("200x120")
def test():
    source = urllib.urlopen(file).readlines()
    string = ''
    for enum, line in enumerate(source, 1):
        string = string + str(line)
        if enum is 3:
            string = string.replace(line, str(line)+str(var1.get()+'\n'))
    with open(file, "w") as port: port.write(string)
    return string
var1 = StringVar()
Entry(textvariable = var1).pack()
Button(text='onay', command=test).pack()
pencere.mainloop()

umtylmzz

[mention=632061]@.py[/mention]

Hocam emeğine sağlık gerçekden çok yardım seversin .
ancak şöyle bir hata aldım

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1553, in __call__
    return self.func(*args)
  File "/root/PycharmProjects/proje/örnek.py", line 17, in test
    source = urllib.urlopen(file).readlines()
NameError: name 'urllib' is not defined

.py

 terminalde çalıştırıken python port.py olarak çalştırmayı.. tkinter python3 te yok.
yüklermisiniz
pip install urllib

umtylmzz

[mention=632063]@.py[/mention]

Üzgünüm, pycharm kullanıyorum ancak olmadı malesef
ancak yinede teşekkür ederim.

.py

Ales başvuru harcını yatırmamıştım biraz aceleye getirdim.


# -*- coding: utf-8 -*-
#!/usr/bin/env python
from Tkinter import *

file = '/home/linuxmt/Python/PORT/port'

pencere = Tk()
pencere.geometry("200x120")
def test():
    source =  open(file, "rw+")
    string = ''
    for enum, line in enumerate(source.readlines(), 1):
        string = string + str(line)
        if enum is 4:
            string = string.replace(line, str(line)+str(var1.get()+'\n'))
    with open(file, "w") as port: port.write(string)
    return string
var1 = StringVar()
Entry(textvariable = var1).pack()
Button(text='onay', command=test).pack()
pencere.mainloop()


python x.py

harun252525

eger grafik arayuz icin ciddi dusunuyorsan Tkinter kullanma. cunki cok ilkel. Tkinter'a alternatif olarak QT, GTK+ kullanabilirsin tavsiyem QT
Kod Yazmak Bir Şiirdir.

.py

[mention=632077]@harun252525[/mention] Grafik arayüzünden ziyade daha çok modül yazıyorum. Yeni başladığım dönem meraktan tkinter öğrenmiştim öylede kaldı. Tavsiyelerin için teşekkürler birgün öğrenme ihtiyacı duyarsam QT den başlayabilirim.

umtylmzz

[mention=632077]@harun252525[/mention]
Tavsiyen için teşekkür ederim. Peki yukarıda yazmış olduğum kodla alakalı yardımcı olabilirmisin ?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 19 Ekim 2017 - 09:19:06

[mention=632065]@.py[/mention]

Yardımlarınız için teşekkür ederim. Kodlamanızı kullandım ancak birden fazla hata mesajı ile karşılaşıyorum. Lütfen yukarıdaki kodlama tarzına uygun bir şekilde destek verebilirseniz memnun olurum ..

Çok çok teşekkürler tekrardan.

.py

[mention=632083]@umtylmzz[/mention] hata alabilieceğiniz herhangi bir durum yok uyarı olmasın onlar :)

umtylmzz

[mention=632084]@.py[/mention]

Windowsta çalıştı, Ubuntuda çalıştıramadım muhtemelen hata benden kaynaklı.

Sizden son bir ricam olacak lütfen bana sadece bu konuda yardım ediniz

Neden ben aşağıdaki kod yapısında değişiklik yapamıyorum ? Eksiği neresi nasıl düzeltmeliyim ?

from tkinter import *
pencere = Tk()
pencere.geometry("200x120")

giris = Entry()
giris.pack()

def fonksiyon():
    with open("c:/yeni klasör/deneme.txt","r+") as dosya:
        data = dosya.readlines()
        data.insert(1,giris)
        dosya.seek(0)
        dosya.writelines(str(data))

onay = Button(pencere)
onay.config(text= "port aç", command = fonksiyon)
onay.pack()

pencere.mainloop()


Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Umut YILMAZ\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "C:/Users/Umut YILMAZ/Python/proje/deneme", line 13, in fonksiyon
    dosya.writelines(data)
TypeError: write() argument must be str, not Entry


Bu Mesajı alıyorum
dosya.writelines(str(data)) yazıncada saçma sağan birşey yazıyor dosyaya

.py

[mention=632085]@umtylmzz[/mention]

Şöyle söylim.

Textboxtan bir değeri okumak için yukarıda tanımladığınız kısmı aşağıdaki gibi degistirin

value = StringVar()
giris = Entry(textvariable = value)
giris.pack()

daha sonra

data.insert(1,giris)

giris yerine value.get() keysini kullanın.

kendinize iyi bakın.


umtylmzz

[mention=632086]@.py[/mention]

ÇOOOOK TEŞEKKÜRLER..  :) :)

.py

[mention=632087]@umtylmzz[/mention]

Ben teşekkür ederim. Başka sorularınız varsa sorun arkadaşlarla yardımcı olmaya çalışırız. Buarada hem kendimizi geliştiriyoruz hemde deneyimlerimizden başka insanlarda faydalanmış oluyor..