简体   繁体   English

PyQT:通过QTextEdit进行LineEdit

[英]PyQT: LineEdit over QTextEdit

Okay, I really need help with this... I have a dockwidget, and in that dockwidget I have a textedit. 好的,我真的需要帮助……我有一个dockwidget,在那个dockwidget中,我有一个textedit。 Ok, all is fine so far, and here is the code for that: 好的,到目前为止一切都很好,这是代码:

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

# Form implementation generated from reading ui file 'out/untitled.ui'
#
# Created: Mon Sep 16 19:33:15 2013
#      by: PyQt4 UI code generator 4.10.2
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(320, 240)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.dockWidget = QtGui.QDockWidget(MainWindow)
        self.dockWidget.setFeatures(QtGui.QDockWidget.NoDockWidgetFeatures)
        self.dockWidget.setObjectName(_fromUtf8("dockWidget"))

        self.textEdit = QtGui.QTextEdit()
        self.textEdit.setGeometry(QtCore.QRect(40, 10, 104, 71))
        self.textEdit.setObjectName(_fromUtf8("textEdit"))
        self.dockWidget.setWidget(self.textEdit)

        MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(8), self.dockWidget)

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

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))

if __name__ == "__main__":
   import sys
   app = QtGui.QApplication(sys.argv)
   Form = QtGui.QMainWindow()
   f = Ui_MainWindow()
   f.setupUi(Form)
   Form.show()
   sys.exit(app.exec_())

Now, what I want to do is place a line edit at the bottom of the window (or dockwidget) that, overlaps the text area, doesn't move when the dockwidget is resized, and fills the whole dockwidget. 现在,我想做的是在窗口(或dockwidget)的底部放置一个行编辑,该行与文本区域重叠,在调整dockwidget的大小时不会移动,并填满整个dockwidget。 I have tried this: 我已经试过了:

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

# Form implementation generated from reading ui file 'out/untitled.ui'
#
# Created: Mon Sep 16 19:33:15 2013
#      by: PyQt4 UI code generator 4.10.2
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(320, 240)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.dockWidget = QtGui.QDockWidget(MainWindow)
        self.dockWidget.setFeatures(QtGui.QDockWidget.NoDockWidgetFeatures)
        self.dockWidget.setObjectName(_fromUtf8("dockWidget"))

        self.textEdit = QtGui.QTextEdit()
        self.textEdit.setGeometry(QtCore.QRect(40, 10, 104, 71))
        self.textEdit.setObjectName(_fromUtf8("textEdit"))
        self.dockWidget.setWidget(self.textEdit)

        QtGui.QLineEdit(self.dockWidget)  # Line edit

        MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(8), self.dockWidget)

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

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))

if __name__ == "__main__":
   import sys
   app = QtGui.QApplication(sys.argv)
   Form = QtGui.QMainWindow()
   f = Ui_MainWindow()
   f.setupUi(Form)
   Form.show()
   sys.exit(app.exec_())

but it is not what I want. 但这不是我想要的。 I REALLY need to get this working, so any help would be great. 我真的需要使此工作正常进行,因此任何帮助都将非常有用。 Thank you. 谢谢。

Here is an example of how to display a widget on top of another: 这是一个如何在另一个窗口小部件上显示窗口小部件的示例:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

#---------
# IMPORT
#---------
import sys

from PyQt4 import QtGui, QtCore

#---------
# DEFINE
#---------
class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.pushButtonInput = QtGui.QPushButton(self)
        self.pushButtonInput.setText("Toggle the QLineEdit widget!")
        self.pushButtonInput.clicked.connect(self.on_pushButtonInput_clicked)

        self.textEditInput = QtGui.QTextEdit(self)
        self.textEditInput.setText("This is a QTextEdit widget.")
        self.textEditInput.installEventFilter(self)

        self.lineEditInput = QtGui.QLineEdit(self)
        self.lineEditInput.setText("This is a QLineEdit widget.")
        self.lineEditInput.hide()

        self.layoutVertical = QtGui.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.pushButtonInput)
        self.layoutVertical.addWidget(self.textEditInput)

    def eventFilter(self, obj, event):
        if event.type() == QtCore.QEvent.Resize:
            geometry = self.textEditInput.geometry()

            self.lineEditInput.setGeometry(geometry)

        return super(MyWindow, self).eventFilter(obj, event)

    @QtCore.pyqtSlot()
    def on_pushButtonInput_clicked(self):
        if self.lineEditInput.isVisible():
            self.lineEditInput.hide()
        else:
            self.lineEditInput.show()

#---------
# MAIN
#---------
if __name__ == "__main__":    
    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.show()

    sys.exit(app.exec_())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM