如何设置QMainWindow的标题?
我尝试使用谷歌搜索并找到了setCaption(),但它似乎不再适用于Qt 4.
我是Qt的新手,所以我想知道是否有办法将a的大小设置QMainWindow为(例如)用户桌面的70%.
我尝试了伸展因子,但它没有用.QWidget::setFixedSize我认为,只有像素数才能工作.
这QMainWindow是Qt应用程序中的主窗口.所以通常你只有一个,但是QMainWindow你的应用程序中可能有多个实例吗?
我正在努力将基于Qt的GUI应用程序B集成到另一个基于Qt的GUI应用程序A中.这两个应用程序都有一个QMainWindow,我正在考虑作为第一步创建一个QMainWindow旧QMainWindows的选项卡.这样,它可以让我专注于将GUI B的后端连接到A的后端,而无需在用户界面本身中更改任何内容.这是一种可行的方法,还是您有其他建议?
我最近才开始编程和Python(PyQt).我有我的主要QMainWindow课程.但我想将它与UI小部件分开,以便所有窗口内容(菜单,工具栏,常用按钮)都在QMainWindow,但所有程序/ UI特定的小部件(pusgbuttons,组合框,图像,复选框等)都在一个单独的QWidget类中.但我不确定我是否正确行事.
我是这样做的:
class MyMainWindow(QMainWindow):
def __init__(self, parent = None):
super(MyMainWindow, self).__init__(parent)
self.main_widget = QWidget(self)
...
self.form_widget = FormWidget(self)
#This is my UI widget
self.main_layout = QVBoxLayout(self.main_widget)
self.main_layout.sizeConstraint = QLayout.SetDefaultConstraint
self.main_layout.addWidget(self.form_widget.main_widget)
#form_widget has its own main_widget where I put all other widgets onto
self.main_widget.setLayout(self.main_layout)
self.setCentralWidget(self.main_widget)
Run Code Online (Sandbox Code Playgroud)
你有什么建议将代码分成小块?怎么做得更好?或者对于UI来说,它们都可以在一个大的地方?我应该将UI代码/类分解为单独的文件吗?
谢谢.
[解决了]
我发现了我的错误 - 我从UI小部件类中删除了main_widget(现在所有UI小部件都直接放在UI类小部件本身上)并且只执行此操作:
self.main_layout.addWidget(self.form_widget)
Run Code Online (Sandbox Code Playgroud)
没有菜单的问题
如果我运行此代码:
#!/usr/local/bin/ python3
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.button1 = QPushButton("1")
self.button2 = QPushButton("2")
self.setCentralWidget(self.button1)
self.button1.clicked.connect(lambda: self.setCentralWidget(self.button2))
self.button2.clicked.connect(lambda: self.setCentralWidget(self.button1))
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
...我得到这个输出:
Traceback (most recent call last):
File "test.py", line 16, in <lambda>
self.button2.clicked.connect(lambda: self.setCentralWidget(self.button1))
RuntimeError: wrapped C/C++ object of type QPushButton has been deleted
Run Code Online (Sandbox Code Playgroud)
我不明白为什么要删除该对象.窗口应该保持对它的引用.我已经彻底调查了这些帖子: 了解"基础C/C++对象已被删除"错误是否 可以查询PyQt4 QObject以确定底层C++实例是否已被销毁?
为什么按钮被删除?
我正在开发一个项目,需要调用带有工具栏的模态窗口,以便在加载之前对某些数据进行一些处理.我需要工具栏的原因是用户有几个可以组合的不同选项.
这里显而易见的选择是模态对话框(我现在正在使用它).问题是我想要一个工具栏.这是一个两部分问题:
QDialog?(也可以在Qt Designer中执行此操作吗?)QMainWindow模态?from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Application(QMainWindow):
def __init__(self):
super(Application, self).__init__()
self.setWindowIcon(QtGui.QIcon('icon.png'))
Run Code Online (Sandbox Code Playgroud)
我正在尝试设置一个窗口图标(窗口的左上角),但正常的图标却消失了.
我尝试了许多图标分辨率(8x8,16x16,32x32,64x64)和扩展名(.png和.ico).
我究竟做错了什么?
好吧,我从Tkinter跳到PyQt,因为PyQt更先进,更好用.但!我在这里遇到了一些麻烦.
我按下主屏幕上的一个按钮后,我正在尝试更改GUI布局.我按下主GUI页面的第一个按钮,然后我希望它转到我将创建的另一个GUI页面.我一直坐在这里几个小时试图找到一些方法来做到这一点 - 没有YouTube上的视频,我没有找到任何帮助的堆栈溢出页面.所以我了解到有一个Qt Designer程序.我不喜欢这样的节目,所以请在回答时尽量避免使用它.
PS:我不想使用多个.py文件,但如果没有其他方法,我想我将不得不这样做.
到目前为止,这是我的代码:
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(50, 50, 400, 450)
self.setFixedSize(400,450)
self.setWindowTitle(" Tool")
self.setWindowIcon(QtGui.QIcon('PhotoIcon.png'))
self.home()
def home(self):
ToolsBTN = QtGui.QPushButton('text', self)
ToolsBTN.clicked.connect(ToolTab)
ToolsBTN.move(50, 350)
CPSBTN = QtGui.QPushButton('text', self)
CPSBTN.clicked.connect(QtCore.QCoreApplication.instance().quit)
CPSBTN.move(150, 350)
CreatorBTN = QtGui.QPushButton('Creator', self)
CreatorBTN.clicked.connect(QtCore.QCoreApplication.instance().quit)
CreatorBTN.move(250, 350)
self.show()
class ToolTab(QtGui.QMainWindow):
def __init__2(self):
super(ToolTab, self).__init__2()
self.setGeometry(50, 50, 400, 450)
self.setFixedSize(400,450)
self.setWindowTitle(" Tool")
self.setWindowIcon(QtGui.QIcon('PhotoIcon.png'))
self.Toolsgui()
def Toolsgui(self):
CPSBTN = QtGui.QPushButton('123', self)
CPSBTN.clicked.connect(QtCore.QCoreApplication.instance().quit)
CPSBTN.move(150, 300)
self.show()
def Run():
app = QtGui.QApplication(sys.argv)
GUI = Window()
GUITOOL …Run Code Online (Sandbox Code Playgroud) 在QMainWindow下面被分配使用一个QSS暗灰色的背景色.我还想更改边框的颜色和标题栏的颜色.
如何实现对QMainWindow边框和标题栏外观的控制?
我想知道如何更改颜色以及如何控制边框宽度和标题栏的高度.

from PyQt4.QtCore import *
from PyQt4.QtGui import *
appStyle="""
QMainWindow{
background-color: darkgray;
}
"""
class GUI(QMainWindow):
def __init__(self):
super(GUI, self).__init__()
self.setStyleSheet(appStyle)
if __name__ == '__main__':
if not QApplication.instance(): app=QApplication([])
w=GUI()
w.setStyleSheet(appStyle)
w.show()
w.raise_()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud) 我仍然在为我的数据库的GUI工作,现在我有一个不同的错误:
Traceback (most recent call last):
File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 84, in <module>
ex = Ui_MainWindow()
File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 16, in __init__
self.setupUi(self)
File "G:\Python\Database Kast Thuis\PyQt Test\MainMenu_ui.py", line 55, in setupUi
MainWindow.setCentralWidget(self.centralwidget)
AttributeError: 'Ui_MainWindow' object has no attribute 'setCentralWidget'
Run Code Online (Sandbox Code Playgroud)
我不了解PyQt的事情,所以我不明白问题是什么.
代码是:(这是编辑版本,原始版本发布如下)
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Main_Menu.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will …Run Code Online (Sandbox Code Playgroud) qmainwindow ×10
pyqt ×5
python ×5
qt ×5
c++ ×3
pyqt4 ×2
pyqt5 ×2
icons ×1
layout ×1
modal-dialog ×1
python-3.6 ×1
qdialog ×1
qobject ×1
qt-designer ×1
size ×1