我在这里显然遗漏了一些东西; 为什么在这个小示例应用程序中没有添加"文件"菜单?
import sys
from PySide.QtGui import *
class Window(QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setWindowTitle('Test')
layout = QHBoxLayout()
self.widget = QWidget()
self.widget.setLayout(layout)
self.setCentralWidget(self.widget)
self.exitAction = QAction('Exit', self, shortcut=QKeySequence.Quit, triggered=self.close)
self.fileMenu = self.menuBar().addMenu('File')
self.fileMenu.addAction(self.exitAction)
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
编辑:
好吧,看起来这实际上是一个unicode问题.这是另一个示例应用程序:
from __future__ import unicode_literals, print_function, division
import sys
from PySide.QtCore import *
from PySide.QtGui import *
class Window(QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.dummyAction = QAction(self.tr('dummy'), self, triggered=self.dummy)
self.gameMenu = self.menuBar().addMenu(self.tr('ddddummy'))
print (self.tr('dummy'))
self.gameMenu.addAction(self.dummyAction)
layout = QHBoxLayout()
self.widget …Run Code Online (Sandbox Code Playgroud) 我正在使用 的子类QMainWindow,在其中声明了一个中央小部件。该小部件除其他外,还包含一个QGridLayout,其中包含一组按钮。按钮的数量可以增加或减少,具体取决于用户的输入。间距设置为零,以便所有按钮都聚集在一起。默认情况下,它看起来像这样:

如果按钮数量增加,网格和窗口会增长得很好;但是,如果按钮数量减少,它将如下所示:

现在我想调整窗口/布局/小部件的大小,以便所有按钮都可以使用最小的空间。我尝试了各种方法,但都无济于事。我查看了这个和这个问题,以及 Qt 板上的各种线程,但没有一个对我有用。
我的布局构建如下:
self.grid = QtGui.QGridLayout()
self.grid.setSpacing(0)
hBox = QtGui.QHBoxLayout()
hBox.addWidget(...)
vBox = QtGui.QVBoxLayout(self.widget)
vBox.addLayout(hBox)
vBox.addLayout(self.grid)
self.setCentralWidget(self.widget)
Run Code Online (Sandbox Code Playgroud)
我试着用...调整它的大小
self.widget.layout().activate()
self.resize(self.minimumSize())
# self.resize(self.sizeHint())
Run Code Online (Sandbox Code Playgroud)
...以及其他各种方法。我还尝试设置窗口和网格的大小策略。
所以,我正在使用Python和PyQt.我有一个包含QTableWidget的主窗口,以及一个以模态方式打开并具有一些QLineEdit小部件的对话框......好了到目前为止,但我有两个问题:
对话框打开后,我的主窗口冻结了,我真的不喜欢那样......
当我完成编辑QLineEdit时,我想要的是程序将搜索QTableWidget,如果表中存在QLineEdit中的文本,则会出现一个对话框,并提供相关信息.这是一般的想法.但是,到目前为止,我似乎只能创建一个新的QTableWidget实例,而我无法使用现有的数据...
我能做些什么呢?
I\xe2\x80\x99m 在 X11 上使用 Qt 4.8.3。
\n我需要知道用户何时结束在屏幕上拖动窗口,\n这是为了读取最终位置并最终启动动画以将窗口位置调整为 \xe2\x80\x9callowed\xe2\x80\x9d 。
\n我注意到QWidget::moveEvent每个小移动都会调用 ,但这非常不方便,因为只有当用户释放鼠标按钮并且移动完全完成时我才必须执行位置检查(并最终启动动画)。
这是真正的问题:当用户单击标题栏时,似乎无法检测鼠标释放事件(或获取鼠标按钮状态),因为它是由操作系统而不是 Qt 控制的。\nI还尝试使用QWidget::x11event(XEvent* e)\xe2\x80\xa6 但事件仅收集在窗口内,而不是标题栏内。
有人知道如何实现这一目标吗?
\n我怀疑我必须自己重新实现标题栏\xe2\x80\xa6 太糟糕了\xe2\x80\xa6
\n我正在开始一个新的Qt project.mainwindow在我的项目中是否必须有一个?
我只有qdialogs,qwidgets因为我不需要工具栏.
是否有信号告诉'show'功能何时结束?
我的代码有问题:如果我写:
QMainWinObj.show();
QMainWinObj.someGuiFunc();
Run Code Online (Sandbox Code Playgroud)
代码不起作用.但是,如果我写:
QMainWinObj.show();
sleep(3000);
QMainWinObj.someGuiFunc();
Run Code Online (Sandbox Code Playgroud)
确实如此.
所以我认为问题是'show'在我调用'someGuiFunc'之前没有完成它的jub.这就是为什么我想要某种"显示"完成的标志.
我有一个QMainWindow由另一个应用程序启动的 。
问题是,在多显示器设置中,启动 my 的应用程序QMainWindow可能驻留在第三个屏幕上,但我的窗口将始终在第一个屏幕上启动。
我通过以下方式解决了这个问题......
QDesktopWidget *m = new QDesktopWidget();
QPoint p= QCursor::pos();
int r= m->screenNumber(p); //get the screennumber where the mouse is
QRect d=m->screenGeometry(r);
QPoint l = d.center(); //not the correct solution
mainWin->move(l); //move the window to that screen
mainWin->show(); //launch
Run Code Online (Sandbox Code Playgroud)
现在,我如何在屏幕中央启动这个窗口。d.center()不是正确的方法,因为窗口的左上角将从中心点启动,所以它会被遮挡。
好心提醒。
我正在使用QMainWindow进行我的项目的GUI开发。我遇到的一个问题是在操作一个其他窗口时阻止所有其他可见窗口获取输入。
我无法使用QDialog。因为需要QMainWindow的丰富功能。
如何将特定窗口声明为模式窗口?
我尝试了QWidget::setWindowMOdality()。
这是一个演示程序,我尝试了但是没用。
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
int main(int argc, char **argv){
QApplication a(argc, argv);
QMainWindow *w1 = new QMainWindow();
w1->resize(500,800);
w1->move(100,50);
w1->show();
QMainWindow *w2= new QMainWindow();
w2->resize(800,500);
w2->move(50,50);
w2->show();
w2->setWindowModality(Qt::ApplicationModal);
return a.exec();
}
Run Code Online (Sandbox Code Playgroud) 我是Qt的新手,我正在用简单的例子做一些练习.
我只是想用一个简单的应用程序来测试我的知识,通过编码,用户在QLineEdit小部件中键入文本,文本将显示在QLabel中.没有必要使它有用.我只是想试试.
在编译应用程序时,我没有错误.但是,打开窗口时,QLabel和QLineEdit窗口小部件不可见.
我的代码在这里:
在window.h
#ifndef WINDOW_H
#define WINDOW_H
#include <QMainWindow>
class QGridLayout;
class QLabel;
class QLineEdit;
class Window : public QMainWindow
{
Q_OBJECT
public:
explicit Window(QWidget *parent = 0);
private:
QGridLayout *mainLayout;
QLabel *label;
QLineEdit *lineEdit;
};
#endif // WINDOW_H
Run Code Online (Sandbox Code Playgroud)
Window.cpp
#include "Window.h"
#include <QGridLayout>
#include <QLineEdit>
#include <QLabel>
Window::Window(QWidget *parent)
: QMainWindow(parent)
{
mainLayout = new QGridLayout;
label = new QLabel(tr("Text"));
lineEdit = new QLineEdit;
mainLayout->addWidget(label, 0, 0);
mainLayout->addWidget(lineEdit, 1, 0);
setLayout(mainLayout);
connect(lineEdit, SIGNAL(textChanged(QString)),
label, SLOT(setText(QString)));
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中 …
当我想添加QWidget到QGridLayout.
我是 PyQt 的新手,以前我在不使用 Class 的情况下创建了一个简单的 GUI,但现在我想尝试在 python 中使用类创建一个简单的 gui 虽然这让我感到困惑,但我收到了这个错误
QLayout: Attempting to add QLayout "" to QWidget "", which already has a layout
QLayout::addChildLayout: layout "" already has a parent
Run Code Online (Sandbox Code Playgroud)
这是我以前没有课的作品
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MyClass(object):
def __init__(self, device_type=None, ip=None, username=None, password=None, secret=None, command=None):
self.device_type = device_type
self.ip = ip
self.username = username
self.password = password
self.secret = secret
self.command = command
device_list = []
#ip_list = …Run Code Online (Sandbox Code Playgroud)