Cursor in QTextEdit setzen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Hallo alle,
ich habe ein kleines Problemchen mit meinem Programm, da der Cursor nicht immer in das richtige QTextEdit springt.

Vereinfacht:
Im Hauptprogramm befindet sich ein QTextEdit und ein Button. Man gibt in das Textfeld etwas ein und klickt den Button.
Per

Code: Alles auswählen

        self.imDlg = ImportDialog()
        self.imDlg.show()  
wird jetzt ein neues Fenster geöffnet. Wird in diesem Fenster wiederum ein Button geklickt, wird ein Signal gesendet, welches im Hauptprogramm folgende Funktion auslöst:

Code: Alles auswählen

    def close_rightorwrong(self):
        self.imDlg.hide()
        self.textfeld.setFocus()
Der Dialog soll also geschlossen oder ''versteckt werden' und anschließend soll der Cursor wieder im Textfeld erscheinen, was doch eigentlich über setFocus() funktionieren müsste, oder?

Vielleicht was ja jemand Rat
lunar

@Trubinial Guru: Minimales Beispiel bitte, anhand von vier Zeilen kann niemand die Ursache erraten ...
BLU3L30PARD
User
Beiträge: 26
Registriert: Freitag 20. August 2010, 19:31

Vlt. solltest du mal damit anfangen zu beschreiben, was denn da NICHT funktioniert?
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Sry, für die späte Antwort, aber ich musste mir erstmal ein wenig Zeit verschaffen, um aus dem großen Programm ein kleines Beispielprogramm zu basteln.
Das Beispiel sieht wohl ziemlich verwirrend und umständlich aus, aber es ist halt aus einem großen komplexen Programm entnommen und ich wollte, dass es möglichst genau wie das eigentliche Programm läuft.
Da ich mit dem QtDesigner und pyuic gearbeitet habe, sind es auch mehrere Dateien:

main.py

Code: Alles auswählen

# -*- coding: utf-8 -*-

from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import * 
from PyQt4.QtGui import *

from main_window import Ui_MainWindow as MW
from dialog1 import MyDialog as MD

import sys

class MainWindow(QtGui.QMainWindow, MW):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setupUi(self)
        
        self.connect(self.pushButton, QtCore.SIGNAL('clicked()'), self.show_dialog)

        
    def show_dialog(self):
        self.askDialog = MD()
        self.askDialog.show()

        self.connect(self.askDialog , QtCore.SIGNAL('close_dialog()'), self.close_dialog)
        
    def close_dialog(self):
        self.askDialog.hide()
        self.textEdit.setFocus()
       
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
dialog1.py

Code: Alles auswählen

# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui
from dialog import Ui_Dialog as dlg

class MyDialog(QtGui.QDialog, dlg):
    def __init__(self):
        QtGui.QDialog.__init__(self)
        self.setupUi(self)
        
        self.connect(self.button, QtCore.SIGNAL('clicked()'), self.button_clicked)
        
    def button_clicked(self):
        self.emit(QtCore.SIGNAL('close_dialog()'))
dialog.py

Code: Alles auswählen

from PyQt4 import QtCore, QtGui

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(640, 480)
        self.gridLayout = QtGui.QGridLayout(Dialog)
        self.gridLayout.setObjectName("gridLayout")
        self.button = QtGui.QPushButton(Dialog)
        self.button.setObjectName("button")
        self.gridLayout.addWidget(self.button, 0, 0, 1, 1)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
        self.button.setText(QtGui.QApplication.translate("Dialog", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
main_window.py

Code: Alles auswählen

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(640, 480)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtGui.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 370, 103, 28))
        self.pushButton.setObjectName("pushButton")
        self.textEdit = QtGui.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(60, 90, 441, 161))
        self.textEdit.setObjectName("textEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 24))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
        self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
In diesem Beispiel funktioniert es überhaupt nicht - was muss ich anders machen? :?:
Liebe Grüße
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Hat denn niemand einen Tip für mich? :(
Antworten