Pyrym
@Pyrym
Python 3 и PyQt5

Почему selectedText в QLineEdit возвращает пустую строку?

Запускаю программу, выделюя в текстовом поле часть текста, жму кнопку, и получаю пустую строку, вместо выделенного текста. Почему так происходит?
# Python 3. PyQt4
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui, QtCore


# ГРАФИКА
class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.resize(400, 150) # шир / выс окна         

        # БЛОК РАЗМЕТКИ
        self.vbox = QtGui.QVBoxLayout()
        # ---
        self.pole_vvod = QtGui.QLineEdit('djf j.f ndsf ndk adf')
        self.vbox.addWidget(self.pole_vvod)
        # ---
        self.btn = QtGui.QPushButton('Пуск')
        self.btn.clicked.connect(self.on_click)
        self.vbox.addWidget(self.btn)
        # ---
        self.setLayout(self.vbox)
        # ---

    # ЛОГИКА
    def on_click(self):
        #text_1 = self.pole_vvod.text()
        text = self.pole_vvod.selectedText()
        #text = self.pole_vvod.setSelection(1,3)
        print(text)


# КОНЕЦ
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = Window()   
    window.show()
    sys.exit(app.exec_())
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
@bbkmzzzz
При клике по кнопке происходит вот что:
lineEdit теряет фокус и очищает выделение -> фокус отдается кнопке -> кнопка генерирует событие клика.
у lineEdit есть сигнал selectionChanged, он испускается при изменении выделения, ловите его, и в нем вызывайте selectedText, либо изменяйте поведение при потере фокуса.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Pyrym
@Pyrym Автор вопроса
Python 3 и PyQt5
Рабочий вариант
# Python 3. PyQt4
# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui, QtCore


# ГРАФИКА
class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.resize(400, 150) # шир / выс окна  
        
        # ПЕРЕМЕННЫЕ КЛАССА
        #self.sel_text = ''
        self.sel_text_lst = []      

        # БЛОК РАЗМЕТКИ
        self.vbox = QtGui.QVBoxLayout()
        # ---
        self.pole_vvod = QtGui.QLineEdit('djf j.f ndsf ndk adf')
        self.pole_vvod.selectionChanged.connect(self.tx)
        self.vbox.addWidget(self.pole_vvod)
        # ---
        self.btn = QtGui.QPushButton('Пуск')
        self.btn.clicked.connect(self.on_click)
        self.vbox.addWidget(self.btn)
        # ---
        self.setLayout(self.vbox)
        # ---

    # ЛОГИКА
    def tx(self):
        self.sel_text = self.pole_vvod.selectedText()
        #print(self.sel_text)
        self.sel_text_lst.insert(0,self.sel_text)
        if len(self.sel_text_lst) > 2:
            self.sel_text_lst.pop(2)
        
    def on_click(self):
        #text = self.sel_text
        text = self.sel_text_lst[1]
        print(text)


# КОНЕЦ
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = Window()   
    window.show()
    sys.exit(app.exec_())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы