2014-01-25 3 views
4

У меня есть программа с двумя окнами, главными и настройками.
Когда я запускаю setText в QLineEdit в файле settings.py, новая строка не находится в графическом интерфейсе, и я могу видеть строку перед кодом setText.
Когда я поместил тот же код в файл настроекUI, сгенерированный из Qt Designer, он работает. Но в settings.py нет.
Файл настроек - это файл, содержащий класс SettingsWindow, и я могу поместить в него настоящий код python.
Файл настроекUI - это файл, содержащий GUI, я сгенерировал его с помощью pyuic4 (или pyuic5).
Этот код работает в settingsUI файле:

self.browse_file.setText("safa")

Но работа dosen't в файле настроек.QLineEdit не обновляется с помощью setText

--UPDATE--

import sys 
from PyQt4 import QtCore, QtGui 
from settingsui import Ui_Dialog 
class SettingsWindow(QtGui.QDialog, Ui_Dialog): 
    def __init__(self): 
     QtGui.QDialog.__init__(self) 
     Ui_Dialog.__init__(self) 
     self.setupUi(self) 
     self.lineEdit.setText("safa") 
     print self.lineEdit.text() 

После: self.lineEdit.setText("safa"), я не могу видеть текст в QLineEdit.
print self.lineEdit.text() выводит текст «Сафа»

+1

Что означает «не работает»? Не могли бы вы показать нам какой-то код? – Hyperboreus

+0

Я имею в виду, что я не вижу новую строку «safa» в QLineEdit в графическом интерфейсе, но если я напечатаю 'self.browse_file.text()', я могу увидеть «сафа» в терминале. –

+0

Здесь может понадобиться еще один код – embert

ответ

2

Проблема в файле mainwind.py.

Вы пытаетесь использовать следующий метод для открытия диалогового окна:

def buttonclicked(self): 
     Dialog = QtGui.QDialog() 
     u = settings.SettingsWindow() 
     u.setupUi(Dialog) 
     Dialog.exec_() 

Причины, почему текст не отображается, это потому, что вы создаете две диалогов. Второй (по имени u) имеет на нем setText(), но затем его выбрасывают без отображения.

Ваш метод должен вместо этого выглядеть следующим образом:

def buttonclicked(self): 
     dialog = settings.SettingsWindow() 
     dialog.exec_() 

Весь код для диалога SettingsWindow установки уже внутри своего метода __init__, поэтому все, что вам нужно сделать, это создать экземпляр.

PS:

В MainWindow.__init__ у вас есть Ui_MainWindow.__init__(self), и в SettingsWindow.__init__ у вас есть Ui_Dialog.__init__(self). Эти строки не делают ничего полезного, потому что классы Ui_* - это просто подклассы object. Таким образом, эти две линии могут быть удалены.

+0

Спасибо! Это решение моей одномесячной проблемы! И извините за мое недоразумение: \ –

3

Вы не должны инициализировать интерфейс вдоль этих линий:

class SettingsWindow(QtGui.QDialog): 
    def __init__(self, parent = None): 
     QtGui.QDialog.__init__(self, parent) 
     self.ui = Ui_Dialog() 
     self.ui.setupUi(self) 
     self.ui.lineEdit.setText("safa") 
     print self.ui.lineEdit.text() 

Это, как я делаю это все время и работает как шарм.

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