2013-08-27 6 views
0

Я решил попробовать свои силы в Python и Tkinter в качестве первого проекта. У меня возникают проблемы с изменением моих переменных при нажатии соответствующих кнопок. Я искал 3 дня и не нашел точно, что мне нужно, чтобы выполнить свою часть «def Next» моей программы. Извините, мой код беспорядок. Любые советы и ярлыки для кодирования этого оцениваются. Конечный результат кода должен выполнить, например iwconfig WLAN1 txpower 20.Изменение переменной с использованием python и tkinter

#!/usr/bin/python 
# First Python & Tkinter project 
# K. Silva 

# Setup interface buttons and functions 
global interface 
interface = "wlan0" 
global cardpower 
cardpower = "0" 

import os 
# Clear screen 
os.system("clear") 
# Set geo for wireless card power 
os.system("sudo iw reg set BO") 
# List interfaces 
os.system("iwconfig") 

# Begin GUI coding 

from Tkinter import * 

master = Tk() 
master.title('Wireless Warrior') 

def Wla0(): 
    interface = "wlan0" 
    print interface 

def Wla1(): 
    interface = "wlan1" 
    print interface 

def Wla2(): 
    interface = "wlan2" 
    print interface 

def Wla3(): 
    interface = "wlan3" 
    print interface 

def Wla4(): 
    interface = "wlan4" 
    print interface 

def Wla5(): 
    interface = "wlan5" 
    print interface 

def Wla6(): 
    interface = "wlan6" 
    print interface 

w = Label(master, text="Wireless Warrior", fg="blue", font=("Helvetica", 16)) 
w.grid(row=0, column=0, columnspan=3) 

Wl0 = Button(master, text="Wlan0", width=4, command=Wla0) 
Wl0.grid(row=1,column=0) 

Wl1 = Button(master, text="Wlan1", width=4, command=Wla1) 
Wl1.grid(row=2,column=0) 

Wl2 = Button(master, text="Wlan2", width=4, command=Wla2) 
Wl2.grid(row=3,column=0) 

Wl3 = Button(master, text="Wlan3", width=4, command=Wla3) 
Wl3.grid(row=4,column=0) 

Wl4 = Button(master, text="wlan4", width=4, command=Wla4) 
Wl4.grid(row=5,column=0) 

Wl5 = Button(master, text="wlan5", width=4, command=Wla5) 
Wl5.grid(row=6,column=0) 

Wl6 = Button(master, text="wlan6", width=4, command=Wla6) 
Wl6.grid(row=7,column=0) 

# Setup power buttons and functions 



def Half(): 
    cardpower = "20" 
    print cardpower 

def One(): 
    cardpower = "30" 
    print cardpower 

def OneFive(): 
    cardpower = "31" 
    print cardpower 

def Two(): 
    cardpower = "33" 
    print cardpower 

def Three(): 
    cardpower = "34" 
    print cardpower 

def Five(): 
    cardpower = "36" 
    print cardpower 

def FiveEight(): 
    cardpower = "37" 
    print cardpower 

half = Button(master, text="500mW", width=4, command=Half) 
half.grid(row=1,column=1) 

one = Button(master, text="1W", width=4, command=One) 
one.grid(row=2,column=1) 

onefive = Button(master, text="1.5W", width=4, command=OneFive) 
onefive.grid(row=3,column=1) 

two = Button(master, text="2W", width=4, command=Two) 
two.grid(row=4,column=1) 

three = Button(master, text="3W", width=4, command=Three) 
three.grid(row=5,column=1) 

five = Button(master, text="5W", width=4, command=Five) 
five.grid(row=6,column=1) 

fiveeight = Button(master, text="5.8W", width=4, command=FiveEight) 
fiveeight.grid(row=7,column=1) 

def Next(): 
    print "iwconfig " + interface + " txpower " + cardpower 
    #os.system("sudo iwconfig " + interface + " txpower " + (cardpower)) 

next = Button(master, text="Next",width=4, command=Next) 
next.grid(row=7,column=3) 


mainloop() 
+0

Я не совсем уверен, в чем проблема ... Когда вы нажимаете кнопку «Далее», она выполняет функцию «Далее», как я ожидаю, вы хотите. – korylprince

+0

Также вы можете посмотреть http://stackoverflow.com/questions/6920302/passing-argument-in-python-tkinter-button-command. Вы можете сократить количество функций, которые вы используете, передав аргумент команде. – korylprince

+0

Спасибо за все советы. Я изучал пример кода. Теперь я изучаю питон с нуля. Последний раз, когда я запрограммировал, был на коммодоре 64 в 80-х с Basic, хе-хе. Я начал на python и tkinter меньше, чем неделю назад. Я заставлю свои программные отбивные и продолжу посещать сайт для получения дополнительных советов. – user2719869

ответ

0

Переменные в функции являются локальными для функции, так что новое значение/переменная «интерфейс» сборки мусора, когда функция выходов. Я бы посоветовал вам потратить время на изучение базовых классов, поскольку это упростит отслеживание переменных.

from Tkinter import * 
from functools import partial 

class WLAN(): 
    def __init__(self): 
     master = Tk() 
     master.title('Wireless Warrior') 
     self.interface = "initial value" ## instance object=available through out the class 

     self.label_interface = StringVar() 
     self.label_interface.set(self.interface) 
     w = Label(master, textvariable=self.label_interface, fg="blue", font=("Helvetica", 16)) 
     w.grid(row=0, column=0, columnspan=3) 

     for but in range(1, 8): 
      w = Button(master, text="Wlan"+str(but), width=4, 
         command=partial(self.wlan, but)) 
      w.grid(row=but,column=0) 

     master.mainloop() 

    def wlan(self, num): 
     self.interface = "wlan" + str(num) 
     print self.interface 
     self.label_interface.set(self.interface) 

WT=WLAN() 
+0

Я использовал команду print, чтобы увидеть, будут ли переменные меняться при вызове def Next. Но для мощности он будет использовать wlan0 и 0. Мой желаемый результат - команда iwconfig wlanx txpower y и выполняется для установки беспроводного интерфейса и уровня мощности. Кстати, это действительно чистый код, у меня есть чему поучиться. – user2719869

+0

Вам не нужно прыгать через кучу обручей. В приведенном выше примере функция «wlan» получает номер нажатой кнопки, поэтому вы можете делать все, что передается каждой функции/кнопке, с помощью оператора if или словаря. – user2719958

Смежные вопросы