I am trying to identify object name and perform some operation. is there any name to make sure if we are in proper widget. or identify widget name
#!/usr/bin/python
from PySide2.QtCore import Qt, QEvent
from PySide2.QtWidgets import QApplication
from PySide2.QtGui import (QTextCharFormat, QIcon, QKeySequence,
QBrush, QColor, QTextDocument, QFont,
QTextCursor, QTextBlockFormat, QFontDatabase)
from PySide2.QtWidgets import (QPlainTextEdit, QSizePolicy, QApplication, QLabel, QGridLayout, QMessageBox, QToolBar, QTextEdit, QCheckBox, QAction,
QTableWidget, QTableWidgetItem, QHeaderView, QMenu,
QWidget)
from PySide2.QtCore import Qt, QSize, QRegExp, QFile, QTextStream, QRect
from PySide2.QtWidgets import (QMainWindow, QVBoxLayout,
QPlainTextEdit, QGridLayout, QGroupBox,
QListWidget, QHBoxLayout, QLabel, QLineEdit,
QMenuBar, QPushButton, QMessageBox, QDialog,
QTextEdit, QVBoxLayout, QWidget, QFormLayout,
QCheckBox, QDialogButtonBox,
QTableWidget, QTableWidgetItem, QHeaderView)
import sys
class Window(QMainWindow):
def __init__(self, app):
super().__init__()
def create_widget(self):
self.plain_textedit = QPlainTextEdit()
self.plain_textedit.setMouseTracking(True)
self.plain_textedit.viewport().installEventFilter(self)
self.another_textedit = QPlainTextEdit()
self.another_textedit.setMouseTracking(True)
self.another_textedit.viewport().installEventFilter(self)
main_layout = QVBoxLayout()
main_layout.addWidget(self.plain_textedit)
main_layout.addWidget(self.another_textedit)
self.window = QWidget()
self.window.setLayout(main_layout)
self.setCentralWidget(self.window)
def eventFilter(self, obj, event):
if obj is self.plain_textedit.viewport():
print ("plain_1")
elif obj is self.another_textedit.viewport():
print ("plain_2")
#Reseting format for single click when user use shift+click select data
def main():
app = QApplication([])
window = Window(app)
window.create_widget()
window.show()
app.exec_()
if __name__ == "__main__":
sys.exit(main())
Related
If you enter an age less than 18 or more than 80 and click on the button, a modal window will light up, but the button will be in the pressing mode and will turn dark, the same with RadioButton will only be highlighted in blue, is it possible to remove it somehow? When you click on another field, everything is fine
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt,QEvent, Signal)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform, QFocusEvent)
from PySide6.QtWidgets import (QApplication, QGridLayout, QHBoxLayout, QLabel,
QLineEdit, QMainWindow, QSizePolicy, QWidget, QRadioButton, QPushButton, QVBoxLayout, QMessageBox)
class QTApp(QWidget):
def __init__(self):
super(QTApp, self).__init__()
self.LE_sample_input_01 = QLineEdit()
self.LE_sample_input_02 = QLineEdit()
self.LE_sample_input_01.setPlaceholderText('Age')
self.RadioButton = QRadioButton('Something')
self.Button = QPushButton('Click')
self.Button.setStyleSheet("QPushButton:pressed {background-color: #b3b3ba;}")
layout = QVBoxLayout(self)
layout.addWidget(self.LE_sample_input_01)
layout.addWidget(self.LE_sample_input_02)
layout.addWidget(self.RadioButton)
layout.addWidget(self.Button)
self.LE_sample_input_01.installEventFilter(self)
def eventFilter(self, obj, event):
if event.type() == QEvent.FocusOut and QFocusEvent.reason(event) == Qt.MouseFocusReason:
if obj is self.LE_sample_input_01:
try:
age = int(self.LE_sample_input_01.text())
if age < 18 or age > 80:
error = QMessageBox()
error.setWindowTitle('Age error')
error.setText('Age entered incorrectly (from 18 to 80 years)')
error.setIcon(QMessageBox.Warning)
error.addButton('Ok',QMessageBox.AcceptRole)
error.exec()
obj.setFocus()
obj.selectAll()
return True
except: pass
return False
if __name__ == "__main__":
app = QApplication()
qt_app = QTApp()
qt_app.show()
app.exec()
from PyQt5 import QtMultimedia, QtMultimediaWidgets
from PyQt5.QtCore import QDir, Qt, QUrl, QSizeF
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer, QMediaPlaylist
from PyQt5.QtMultimediaWidgets import QVideoWidget, QGraphicsVideoItem
from PyQt5.QtWidgets import (QApplication, QFileDialog, QHBoxLayout, QLabel,
QPushButton, QSizePolicy, QSlider, QStyle, QVBoxLayout, QWidget, QStackedWidget,
QStackedLayout, QGraphicsView, QGraphicsScene)
from PyQt5.QtWidgets import QMainWindow,QWidget, QPushButton, QAction
from PyQt5.QtGui import QIcon
import sys, glob
class VerySimpleMediaPlayer(QWidget):
def __init__(self, parent):
super().__init__(parent)
self.media_player = QtMultimedia.QMediaPlayer(self)
self.media_widget = QtMultimediaWidgets.QVideoWidget(self)
self.media_player.setVideoOutput(self.media_widget)
self.media_widget.show()
self.media_player.setMedia(QMediaContent(QUrl.fromLocalFile('avideo.mp4')))
self.media_player.mediaStatusChanged.connect(self.look)
layout = QVBoxLayout()
self.real = QStackedWidget()
self.button = QPushButton()
self.button.setText('Push Me PLS!')
self.real.addWidget(self.button)
self.button.clicked.connect(self.clicked)
self.real.addWidget(self.media_widget)
layout.addWidget(self.real)
self.setLayout(layout)
self.awidget = QWidget()
bx = QVBoxLayout()
lbl = QLabel()
lbl.setText('Video Has Finished!')
bx.addWidget(lbl)
self.awidget.setLayout(bx)
self.real.addWidget(self.awidget)
def clicked(self):
self.media_player.play()
self.real.setCurrentIndex(self.real.currentIndex() + 1)
def look(self, state):
if state == 7:
self.real.setCurrentIndex(self.real.currentIndex() + 1)
app = QApplication(sys.argv)
player = QMainWindow()
player.setCentralWidget(VerySimpleMediaPlayer(player))
player.show()
sys.exit(app.exec_())
It works good but the only problem is that the videos are playing horizontally even if the video is a vertical video like 800 x 1600.
Is there any way to rotate videos either automatically or non-automatically?
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtWidgets import QApplication, QButtonGroup, QMainWindow, QPushButton, QTextEdit, QWidget, QSizeGrip, QLabel, QFormLayout, QScrollArea, QGroupBox, QVBoxLayout, QDialog, QHBoxLayout, QLineEdit
from PyQt5.QtGui import *
from PyQt5.QtCore import QRect
import sys
class main_window(QMainWindow):
def __init__ (self):
super(main_window, self).__init__()
self.setWindowTitle("Polynomial Equation Solver")
self.setFixedSize(957, 681)
self.setStyleSheet("background-image : url(Background1.jpg)")
degree_textbox = QTextEdit(self)
degree_textbox.setGeometry(460, 25, 200, 40)
degree_textbox.setStyleSheet("background-image : url(Text boxes background.jpg)")
app = QApplication(sys.argv)
window=main_window()
window.show()
app.exec_()
I have written small program and would like to use underline format rather than selected text which is provided by QplainTextEdit
it work well, when i click mouse left click
But when i Use shift+left click, qplaintextedit select complete text and underline format gone.
I am trying to use only underline format and do not select text.
Expected behavior for shift+left click
#!/usr/bin/python3.6
from PySide2.QtCore import Qt, QEvent
from PySide2.QtWidgets import QApplication
from PySide2.QtGui import (QTextCharFormat, QIcon, QKeySequence,
QBrush, QColor, QTextDocument, QFont,
QTextCursor, QTextBlockFormat, QFontDatabase)
from PySide2.QtWidgets import (QPlainTextEdit, QSizePolicy, QApplication, QLabel, QGridLayout, QMessageBox, QToolBar, QTextEdit, QCheckBox, QAction,
QTableWidget, QTableWidgetItem, QHeaderView, QMenu,
QWidget)
from PySide2.QtCore import Qt, QSize, QRegExp, QFile, QTextStream, QRect
from PySide2.QtWidgets import (QMainWindow, QVBoxLayout,
QPlainTextEdit, QGridLayout, QGroupBox,
QListWidget, QHBoxLayout, QLabel, QLineEdit,
QMenuBar, QPushButton, QMessageBox, QDialog,
QTextEdit, QVBoxLayout, QWidget, QFormLayout,
QCheckBox, QDialogButtonBox,
QTableWidget, QTableWidgetItem, QHeaderView)
import sys
class Window(QMainWindow):
def __init__(self, app):
super().__init__()
self.shift_left_click_cursor = []
def create_widget(self):
self.plain_textedit = QPlainTextEdit()
self.plain_textedit.setLineWrapMode(QPlainTextEdit.NoWrap)
self.plain_textedit.setStyleSheet(
"""QPlainTextEdit {font-size: 14pt;
font-family: Courier;}""")
self.plain_textedit.setMouseTracking(True)
self.plain_textedit_format = self.plain_textedit.currentCharFormat()
self.plain_textedit.setCursorWidth(5)
self.plain_textedit.viewport().installEventFilter(self)
main_layout = QVBoxLayout()
main_layout.addWidget(self.plain_textedit)
self.window = QWidget()
self.window.setLayout(main_layout)
self.setCentralWidget(self.window)
def eventFilter(self, obj, event):
if obj is self.plain_textedit.viewport() and event.type() == QEvent.MouseButtonPress:
#Reseting format for single click when user use shift+click select data
if event.button() == Qt.LeftButton:
text_cursor = self.plain_textedit.cursorForPosition(event.pos())
text_cursor.select(QTextCursor.LineUnderCursor)
format = QTextCharFormat()
format.setForeground(QBrush(QColor("blue")))
format.setUnderlineStyle(QTextCharFormat.SingleUnderline)
text_cursor.mergeCharFormat(format)
modifiers = QApplication.keyboardModifiers()
if modifiers == Qt.ShiftModifier:
self.shift_left_click_cursor.append(text_cursor)
self.change_summary_block_format()
def change_summary_block_format(self):
start_line = self.shift_left_click_cursor[0].blockNumber()
end_line = self.shift_left_click_cursor[-1].blockNumber()
index = 0
plain_textcursor = self.plain_textedit.textCursor()
plain_textcursor.select(QTextCursor.Document)
plain_textcursor.setCharFormat(self.plain_textedit_format)
plain_textcursor.clearSelection()
for line in range(start_line, end_line + 1):
text_data = self.plain_textedit.document().findBlockByLineNumber(line)
print(text_data.text())
text_cursor = QTextCursor(text_data)
# self.plaintext_cursor_multiselection(text_data)
print(text_data)
def main():
app = QApplication([])
window = Window(app)
window.create_widget()
window.show()
app.exec_()
if __name__ == "__main__":
sys.exit(main())
If you send the event to the QPlainTextEdit then you can get the position and anchor of the selection and move them to cover the whole line.
class Window(QMainWindow):
def __init__(self, app):
super().__init__()
self.shift_left_click_cursor = []
def create_widget(self):
self.plain_textedit = QPlainTextEdit()
self.plain_textedit.setLineWrapMode(QPlainTextEdit.NoWrap)
self.plain_textedit.setStyleSheet(
"""QPlainTextEdit {font-size: 14pt;
font-family: Courier;}""")
self.plain_textedit.setMouseTracking(True)
self.plain_textedit_format = self.plain_textedit.currentCharFormat()
self.plain_textedit.setCursorWidth(5)
self.plain_textedit.viewport().installEventFilter(self)
main_layout = QVBoxLayout()
main_layout.addWidget(self.plain_textedit)
self.window = QWidget()
self.window.setLayout(main_layout)
self.setCentralWidget(self.window)
def eventFilter(self, obj, event):
if obj is self.plain_textedit.viewport() and event.type() == QEvent.MouseButtonPress:
#Reseting format for single click when user use shift+click select data
if event.button() == Qt.LeftButton and event.modifiers() & Qt.ShiftModifier:
self.plain_textedit.mousePressEvent(event)
text_cursor = self.plain_textedit.textCursor()
positions = (text_cursor.anchor(), text_cursor.position())
text_cursor.setPosition(min(positions))
text_cursor.movePosition(QTextCursor.StartOfLine)
text_cursor.setPosition(max(positions), QTextCursor.KeepAnchor)
text_cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.KeepAnchor)
format = QTextCharFormat()
format.setForeground(QBrush(QColor("blue")))
format.setUnderlineStyle(QTextCharFormat.SingleUnderline)
text_cursor.mergeCharFormat(format)
text_cursor.clearSelection()
text_cursor.setPosition(positions[1])
self.plain_textedit.setTextCursor(text_cursor)
return True
return super().eventFilter(obj, event)
Note that you could instead subclass QPlainTextEdit and reimplement mousePressEvent.
class PlainTextEdit(QPlainTextEdit):
def mousePressEvent(self, event):
super().mousePressEvent(event)
if event.button() == Qt.LeftButton and event.modifiers() & Qt.ShiftModifier:
text_cursor = self.textCursor()
positions = (text_cursor.anchor(), text_cursor.position())
text_cursor.setPosition(min(positions))
text_cursor.movePosition(QTextCursor.StartOfLine)
text_cursor.setPosition(max(positions), QTextCursor.KeepAnchor)
text_cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.KeepAnchor)
format = QTextCharFormat()
format.setForeground(QBrush(QColor("blue")))
format.setUnderlineStyle(QTextCharFormat.SingleUnderline)
text_cursor.mergeCharFormat(format)
text_cursor.clearSelection()
text_cursor.setPosition(positions[1])
self.setTextCursor(text_cursor)
I have followed the specific kind of import rather than writing *.
from PyQt4.QtGui
What else am I missing?
import sys
from PyQt4.QtGui import QMainWindow, QSizePolicy, QWidget, QVBoxLayout, QAction,\
QKeySequence, QLabel, QItemSelectionModel, QMessageBox, QFileDialog, QFrame, \
QDockWidget, QProgressBar, QProgressDialog
from PyQt4.QtCore import SIGNAL, QSettings, QSize, QPoint, QVariant, QFileInfo, QTimer, pyqtSignal, QObject
class Window(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QGraphicsView.__init__(self, parent)
self.scene = QtGui.QGraphicsScene(self)
self.scene.setBackgroundBrush(QtGui.QBrush(QtCore.Qt.darkGray, QtCore.Qt.SolidPattern))
self.setScene(self.scene)
self.setDragMode(QtGui.QGraphicsView.ScrollHandDrag)
self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
self.viewport().setCursor(QtCore.Qt.CrossCursor)
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self._pan = False
self._draw = False
self._moved = False
self._sel = False
self.pen = None
self.penid = None
self.cmap = None
self.penwidth = 4
self._redoStack = []
self._histStates = []
self._baseRects = []
app = QtGui.QApplication(sys.argv)
GUI = Window()
sys.exit(app.exec_())
I added the following lines to the code and that solved the error:
from PyQt4 import QtGui
from PyQt4 import QtCore
It looks like this now:
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtGui import QMainWindow, QSizePolicy, QWidget, QVBoxLayout, QAction,\
QKeySequence, QLabel, QItemSelectionModel, QMessageBox, QFileDialog, QFrame, \
QDockWidget, QProgressBar, QProgressDialog
from PyQt4.QtCore import SIGNAL, QSettings, QSize, QPoint, QVariant, QFileInfo, QTimer, pyqtSignal, QObject