2013-05-01 3 views
-1

Мой код состоит из нескольких классов - некоторые из них являются виджетами пользовательского интерфейса, некоторые из них являются чистыми, а один - для хранения некоторых глобальных параметров (настройки из MainWindow, к которому я обращаюсь, от других виджетов).После разделения моего кода на один файл на класс - класс не может видеть один «глобальный класс»

Я создаю «глобальные настройки класса» прямо вместе с Mainwindow, все остальное создано MainWindow или его дочерними элементами. - Это работает до тех пор, пока весь код находится в одном файле.

Чтобы избежать глупой прокрутки, я разделил код на один файл для каждого класса. Создание «global settings-class» остается в файле с MainWindow.

Но теперь дети MainWindow не могут получить доступ к/см «глобальные настройки класса» больше ...

файлы находятся в той же папке, и я попытался import xxx, from xxx import * и import xxx as x.

Прокомментировав весь «связанный» вариант (и потеряв эту функциональность), он работает.

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

Edit - детали:

файл 1:

class MainWindow(QMainWindow): 
    def __init__(self): 
     QMainWindow.__init__(self) 

     ... # A MenuBar with checkable Items, QAction calls a function which sets the option in o_option instance 

    def startWidgetXYZ(self): 
     self.setWindowTitle(...) 
     self.initAllChecks() 
     xyz = XYZ(file, topic, self) 
     self.setCentralWidget(xyz) 

o_options = MenuBarOptions() # this is the global 
app = QApplication(sys.argv) 
m_window = MainWindow() 
m_window.show() 
sys.exit(app.exec_()) 

file2:

class XYZ(QWidget): 
    def __init__(self, file, topic, parent=None): 
     QWidget.__init__(self, parent) 

     self.k_korpus = Korpus(file, topic) # the class Korpus will load/save data from/to XML-files 

file3:

class Korpus(object): 
    def __init__(self, file, topic): 

     self.file = file 
     self.level = level 
     self.patienceChecked = o_options.isOption123Checked() # NameError: global name 'o_options' is not defined - (but no error if code is in one file) 
+1

Без кода и трассировки это по существу неопровержимо. Мы можем дать вам неопределенные заявления о том, как вам нужно, чтобы глобальный объект был импортирован везде, где он вам нужен, но, не видя, как эти импортные сбой вам не удастся, мы просто будем колоть в темноте. –

+0

ах спасибо. Я предположил, что в моей идее есть что-то неотъемлемое. – Chrugel

ответ

0

Put "глобальные настройки класса" в другой файл до MainWindow. Затем в каждом файле (основной, файл 1 и файл 2) добавьте что-то вроде

from global_settings_file import GlobalSettingsClass 
+0

Сам код для класса был уже в собственном файле. После вашего комментария я перенес экземпляр из MainWindow и поместил его с самим кодом ... он работает. Благодаря! – Chrugel

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