2015-06-24 4 views
0

Я пытаюсь изменить поведение программы на лету, отредактировав исходный файл (в Python 3.4.2, Windows 8.1). Моя программа представляет собой графический интерфейс tkinter с кнопкой, которая суммирует два значения, но я хочу иметь возможность изменять поведение кнопки. В настоящее время я пытаюсь сделать это, отредактировав исходный файл (изменив, скажем, дополнение к вычитанию), сохранив его, а затем нажав кнопку, чья функция обратного вызова import s - это исходный файл. Я хочу, чтобы изменения моего кода отражались в запущенном графическом интерфейсе без необходимости его завершения и перезапуска. Я также хочу, чтобы этот import перекомпилировал только те строки, которые я изменил, а не весь файл.Изменение исходного файла во время работы программы

Программа, reload0.py:

import time 
import serial 
import sys 
import os 
import tkinter as tk 
from tkinter import ttk 
from tkinter import * 
from tkinter import messagebox 
from tkinter import filedialog 
try: 
    import Tkinter    # Python 2 
    import ttk 
except ImportError: 
    import tkinter as Tkinter # Python 3 
    import tkinter.ttk as ttk 
mGui = Tk() 
mGui.title("GUI") 
mGui.geometry('400x200+100+100') 
def mOp(): 
    num1 = value1.get() 
    num2 = value2.get() 
    Op=num1+num2 
    name1.set('Sum') 
    name2.set(Op) 
def mReLoad(): 
    import reload0.py 
    mGui.update() 
def mCheck(): 
    if len(name1.get()) == 0: 
    name1.set('name1') 
    mGui.update() 
    if (len(name2.get()) == 0): 
    name2.set('name2') 
    mGui.update() 
    try: 
     print(value1.get()) 
    except ValueError: 
     value1.set(0) 
     mGui.update() 
    try: 
     print(value2.get()) 
    except ValueError as ValE: 
     value2.set(0) 
     mGui.update() 
     print(ValE) 

value1 = DoubleVar() 
value2 = DoubleVar() 
name1 = StringVar() 
name2 = StringVar() 
mButtonSave = Button(mGui, text = "Operation", command = mOp, fg = 'Red').place(x=150,y=80) 
mButtonLoad = Button(mGui, text = "ReLoad Operation", command = mReLoad, fg = 'Red').place(x=150,y=110) 
mButtonLoad = Button(mGui, text = "Check", command = mCheck, fg = 'Red').place(x=150,y=140) 
tText1 = Entry(mGui, textvariable = name1).place(x=10,y=80) 
tText2 = Entry(mGui, textvariable = name2).place(x=10,y=100) 
vText1 = Entry(mGui, textvariable = value1).place(x=10,y=120) 
vText2 = Entry(mGui, textvariable = value2).place(x=10,y=140) 
+0

Я предлагаю избегать термина 'reload', который имеет определенное значение в python и в значительной степени не поддерживается. Вместо этого используйте 'refresh' везде. – o11c

+3

Python не позволит вам изменять исходные файлы, а затем просто «импортировать» их снова на лету. Что делать, если вы удалили определение класса или что-то еще? Что сделает интерпретатор с остальными объектами этого класса? Независимо от того, что вы пытаетесь сделать с этим, я гарантирую, что это проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – TigerhawkT3

+0

Кроме того, в вашем коде есть только блоки «except», не привязанные к блокам 'try', несовместимые отступы и не-[PEP8] (https://www.python.org/dev/peps/pep-0008/) форматирование , – TigerhawkT3

ответ

0

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

Судя по другому вопросу, который я видел, вы совершенно новичок в программировании на питоне. Я бы порекомендовал потратить некоторое время на некоторые базовые обучающие программы, чтобы познакомиться с питоном и некоторыми концепциями программирования.

, например

import reload.py 

должен быть просто

import reload 

https://wiki.python.org/moin/BeginnersGuide/NonProgrammers

читать книгу, сделать некоторые примеры, и достаточно, чтобы вы будете один отвечать на вопросы здесь, хорошо удачи!

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