我有一个在我的应用程序中打开新窗口的按钮。
我希望这些窗户以某种方式“漂亮地”打开。好吧,在左边,他们要么从上面航行,要么有某种延迟。
我在任何地方都找不到这样的例子。有人可以告诉我如何为子窗口制作类似的样式吗?谢谢你。
我举一个打开新窗口的简单例子
UI_test.py
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import Qt
from random import randint
class Ui_Form(object):
def setupUi(self, Form):
Form.resize(1300, 700)
self.layout = QtWidgets.QHBoxLayout()
self.layout.setContentsMargins(0, 0, 0, 0)
self.layout.setSpacing(0)
self.listWidget = QtWidgets.QListWidget()
self.layout.addWidget(self.listWidget)
self.stackedWidget = QtWidgets.QStackedWidget()
self.layout.addWidget(self.stackedWidget)
self.listWidget.currentRowChanged.connect(
self.stackedWidget.setCurrentIndex)
item1 = QtWidgets.QListWidgetItem(QtGui.QIcon('icons/settings.png'),'CamSettings', self.listWidget)
item2 = QtWidgets.QListWidgetItem(QtGui.QIcon('icons/explore.png'),'Explore', self.listWidget)
item1.setSizeHint(QtCore.QSize(10, 60))
item2.setSizeHint(QtCore.QSize(10, 60))
item1.setTextAlignment(QtCore.Qt.AlignCenter)
item2.setTextAlignment(QtCore.Qt.AlignCenter)
label2= QtWidgets.QLabel('Это страница 2')
label2.setAlignment(QtCore.Qt.AlignCenter)
label2.setStyleSheet('background: rgb(%d, %d, %d); margin: 50px;' % (
randint(0, 255), randint(0, 255), randint(0, 255)))
create_tiff_but = QtWidgets.QPushButton('Create TIFF')
create_tiff_but.setObjectName('createTifBut')
create_tiff_but.setFixedSize(200, 70)
create_tiff_but.clicked.connect(Form.create_tiff)
image_panel_buttons = QtWidgets.QHBoxLayout()
image_panel_buttons.addWidget(create_tiff_but)
image_panel_buttons_frame = QtWidgets.QFrame()
image_panel_buttons_frame.setLayout(image_panel_buttons)
main_first_box = QtWidgets.QVBoxLayout()
main_first_box.addWidget(image_panel_buttons_frame)
first_container = QtWidgets.QWidget()
first_container.setLayout(main_first_box)
self.stackedWidget.addWidget(first_container)
self.stackedWidget.addWidget(label2)
Form.setLayout(self.layout)
应用程序.py
import sys
import os
from PySide2 import QtWidgets
from PySide2 import QtWidgets, QtGui, QtCore
from UI_test import Ui_Form
from create_tiff import Create_TIFF
class App(QtWidgets.QWidget):
def __init__(self, parent = None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_Form()
self.ui.setupUi(self)
def create_tiff(self):
# функция открытия диалогового окна для создания tiff
self.ct = Create_TIFF()
self.ct.displayInfo()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())
create_tiff.py
import os
import json
from PySide2 import QtWidgets
from PySide2 import QtCore
class Create_TIFF(QtWidgets.QWidget):
#модуль с диалоговым окном для создания tiff файла
def __init__(self, parent=None):
super(Create_TIFF, self).__init__(parent)
self.setFixedWidth(400)
self.setFixedHeight(220)
self.setObjectName('modalTIFF')
self.setWindowTitle('Create TIFF')
self.json=None
self.path=None
button_json = QtWidgets.QPushButton("JSON")
button_json.setObjectName('modalJSONBtn')
button_json.setFixedWidth(90)
button_img = QtWidgets.QPushButton("IMG PATH")
button_img.setObjectName('modalImgPathBtn')
button_img.setFixedWidth(90)
button_tiff = QtWidgets.QPushButton("Create TIFF")
button_tiff.setObjectName('modalCrtTIFFBtn')
button_tiff.setFixedSize(200, 70)
json_label = QtWidgets.QLabel('Название json')
self.name_json= QtWidgets.QLineEdit()
self.name_json.setFixedWidth(160)
path_label = QtWidgets.QLabel('Путь к файлу')
self.name_path = QtWidgets.QLineEdit()
self.name_path.setFixedWidth(160)
first_h_box = QtWidgets.QHBoxLayout()
first_h_box.addWidget(json_label)
first_h_box.addWidget(self.name_json)
first_h_box.addWidget(button_json)
second_h_box = QtWidgets.QHBoxLayout()
second_h_box.addWidget(path_label)
second_h_box.addWidget(self.name_path)
second_h_box.addWidget(button_img)
first_h_box_frame = QtWidgets.QFrame()
first_h_box_frame.setLayout(first_h_box)
second_h_box_frame = QtWidgets.QFrame()
second_h_box_frame.setLayout(second_h_box)
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(first_h_box_frame)
vbox.addWidget(second_h_box_frame)
vbox.addWidget(button_tiff,alignment=QtCore.Qt.AlignCenter)
self.setLayout(vbox)
resolution = QtWidgets.QDesktopWidget().screenGeometry()
self.move((resolution.width() / 2) - (self.frameSize().width() / 2),
(resolution.height() / 2) - (self.frameSize().height() / 2))
def displayInfo(self):
self.show()
该类为
QPropertyAnimationQt 属性设置动画。更多https://doc.qt.io/qt-5/qpropertyanimation.html