import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QLabel
from PyQt5.QtWidgets import QVBoxLayout,QHBoxLayout,QLineEdit,QTableWidget,QTableWidgetItem
from PyQt5.QtCore import QTimer,QThread,pyqtSignal,Qt
import pygetwindow
import pyautogui
class myWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('窗口数据')
self.resize(239,139)
self.setFixedSize(239,139)
self.setWindowFlag(Qt.WindowStaysOnTopHint, True)
box=QVBoxLayout()
# 搜索
search_box=QHBoxLayout()
self.search_input=QLineEdit()
self.search_button=QPushButton('确定')
search_box.addWidget(self.search_input,8)
search_box.addWidget(self.search_button,2)
# 结果
self.results=QLabel('待')
# 表格
self.table=QTableWidget(self)
self.table.setRowCount(1)
self.table.setColumnCount(2)
self.table.setHorizontalHeaderLabels(['窗口大小','鼠标位置'])
# box
box.addLayout(search_box,1)
box.addWidget(self.results,1)
box.addWidget(self.table,6)
# self.t = QTimer()
# self.t.timeout.connect(self.datas)
# self.t.start(1000)
self.setLayout(box)
def datas(self):
print(self.width(),self.height())
class main(myWindow):
sj=pyqtSignal(int,int,str)
sjs = pyqtSignal(int, int, str)
def __init__(self):
super().__init__()
self.win_t=QTimer()
self.win_t.timeout.connect(lambda: self._win_xy())
self.move_t=QTimer()
self.move_t.timeout.connect(lambda :self._move_xy())
self.search_button.clicked.connect(lambda :self.button_search())
self.sj.connect(self.win_xy)
self.sjs.connect(self.move_xy)
self.k=True
def button_search(self):
self.s=self.search_input.text()
if not self.s:
self.results.setText('不要留空!')
pass
else:
self.win_t.start()
def win_xy(self,row,c,data):
item=QTableWidgetItem(data)
item.setTextAlignment(Qt.AlignCenter)
self.table.setItem(row,c,item)
def _win_xy(self):
print('运行')
try:
windows=pygetwindow.getWindowsWithTitle(self.s)[0]
self.l=windows
print(windows)
self.results.setText('找到窗口')
self.sj.emit(0, 0, f'w:{windows.width}h:{windows.height}')
if self.k:
self.move_t.start()
self.k=False
except Exception as e:
print(e)
self.k=True
self.results.setText('没有这个窗口')
self.win_t.stop()
pass
def move_xy(self,r,c,data):
item = QTableWidgetItem(data)
item.setTextAlignment(Qt.AlignCenter)
self.table.setItem(r, c, item)
pass
def _move_xy(self):
try:
x,y=pyautogui.position()
self.sjs.emit(0,1,f'x:{x-self.l.left},y{y-self.l.top}')
except Exception as e:
print(e)
pass
if __name__ == '__main__':
app=QApplication(sys.argv)
windows=main()
windows.show()
sys.exit(app.exec_())
pyqt pyautogui pygetwindow实现的窗口宽高和在窗口内坐标
于 2024-10-13 21:39:31 首次发布